boost :: smart_ptr的内部结构

时间:2014-04-16 23:21:46

标签: c++ boost shared-ptr

我正在尝试建立哪些数据成员基元/对象(T*指针之外)boost(或std如果它更容易)shared_ptr具有哪些数据成员基元/对象当T*用于访问底层堆内存时,它与shared_ptr指针在同一个L1缓存行中?

当我这样做时:

sizeof(boost::shared_ptr<int>)

sizeof(boost::shared_ptr<double>)

我得到相同的答案--8个字节,但在我的系统上,一个int是4个字节而一个double是8个字节?

我查看了shared_ptr的提升源代码:

http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/shared_ptr.htm

但我甚至无法看到T*数据成员....所以我不太确定boost::shared_ptr在数据成员方面的外观如何?

1 个答案:

答案 0 :(得分:3)

boost::shared_ptr<>包含两个指针,一个指向对象本身,另一个指向用于引用计数,正确销毁等的跟踪器对象。这意味着它将2 * sizeof(void*)大。

跟踪器对象的结构当然是一个实现细节,但它是几十个大字节(虚拟表,指向对象的指针,引用计数,弱计数和一些额外的标志等等)。

如果你按照建议使用boost::make_shared(),那么对象本身和信息helding将在一个堆块中创建,指针将只相隔几个字节。