我正在阅读以下内容:
http://www.informit.com/articles/article.aspx?p=31529&seqNum=5
作者在文中解释了三种智能指针设计(请参见文章末尾的图片)。
我相信当前的GCC、CLang和可能的Visual C++使用的是带控制块的智能指针。
我可以想象为什么不使用“内部引用计数”,但第二种实现——“带指向指针块的智能指针”有什么问题吗?虽然需要两个指针解引用,但智能指针对象的大小将只有一半。
“带控制块的智能指针” 智能指针与指向指针块的指针。 智能指针与侵入式引用计数。
http://www.informit.com/articles/article.aspx?p=31529&seqNum=5
作者在文中解释了三种智能指针设计(请参见文章末尾的图片)。
我相信当前的GCC、CLang和可能的Visual C++使用的是带控制块的智能指针。
我可以想象为什么不使用“内部引用计数”,但第二种实现——“带指向指针块的智能指针”有什么问题吗?虽然需要两个指针解引用,但智能指针对象的大小将只有一半。
“带控制块的智能指针” 智能指针与指向指针块的指针。 智能指针与侵入式引用计数。
std::unique_ptr
不执行任何额外的堆分配,而make_shared
则会。因此,内存布局肯定会有所不同。如果您指的是auto up = std::shared_ptr(ptr);
- 那么是的,这是一种常见的实现技术,使make_shared
将对象本身和控制块的内存合并为单个堆分配,而shared_ptr
的构造函数显然无法做到这一点(对象的分配已经发生)。 - Igor Tandetnik