【发布时间】:2013-02-02 20:03:22
【问题描述】:
make_shared 为对象和引用计数器分配单个块。因此,使用这种技术有明显的性能优势。
我在VS2012中做了简单的实验,我正在寻找'证据':
std::shared_ptr<Test> sp2 = std::make_shared<Test>();
std::shared_ptr<Test> sp(new Test());
// Test is a simple class with int 'm_value' member
调试时我在本地查看类似这样的内容(删除了一些行)
- sp2 shared_ptr {m_value=0 } [make_shared] std::shared_ptr<Test>
+ _Ptr 0x01208dec {m_value=0 } Test *
+ _Rep 0x01208de0 make_shared std::_Ref_count_base *
- sp shared_ptr {m_value=0 } [default] std::shared_ptr<Test>
+ _Ptr 0x01203c50 {m_value=0 } Test *
+ _Rep 0x01208d90 default std::_Ref_count_base *
似乎 sp2 分配在 0x01208de0 (有一个 ref 计数器),然后在 0x01208dec 有一个 Test 对象。位置非常接近。
在第二个版本中,我们有 0x01208d90 用于参考计数器,0x01203c50 用于对象。这些位置很远。
这是正确的输出吗?我理解正确吗?
【问题讨论】:
标签: c++ memory-management smart-pointers