Chromium의 base::scoped_refptr?

What is base::scoped_refptr in Chromium

Posted by dydtjr1128 on July 04, 2019 · 170 words/1 min read Chromium
base::scoped_refptr?

Intro

Chromium에서는 std::unique_ptr과 base::scoped_refptr을 주로 사용한다.
Base::scoped_refptr은 shared pointer와 비슷한 개념으로 보면 된다.(래핑x)

std::shared_ptr vs Base::scoped_refptr

shared_ptr

기존의 std::shared_ptr은

auto a = new Widget;
std::shared_ptr<Widget> widget1(a);
std::shared_ptr<Widget> widget2(a);

위의 코드에서 Control block이 여러 번 생성되는 이슈가 발생한다.

그렇기 때문에 raw pointer 변수로부터 shared_ptr이 생성되지 않도록 해야한다.

std::shared_ptr<Widget> widget3(new Widget)
auto widget4 = std::make_shared<Widget>();

위의 두 코드 중 하나를 사용해야 한다.

Base::scoped_refptr

Base::scoped_refptr 내부에는 RefCountedThreadSafe와 RefCounted가 존재하고 멀티쓰레드 환경에서의 atomic한 refcount과 하나의 쓰레드를 위한 uint32의 refcount를 변수로 가지고 있어 상황에 맞게 효율적으로 관리가 가능하다.

References

https://www.chromium.org/developers/smart-pointer-guidelines
https://www.slideshare.net/deview/143-modern-c