【发布时间】:2016-05-09 15:38:15
【问题描述】:
您好,我正在制作自己的引用计数智能指针,但在开始之前有两个概念我不太了解。
我知道当创建一个共享指针指向一个对象时,我必须为一个结构/类分配内存,该结构/类将包含诸如引用计数(最初为一个)之类的信息,也许还有一个互斥体用于递增和递减。当我使用 =operator 使另一个共享指针也指向这个对象时,我还将指向这个结构/类的指针传递给那个新指针,这样我就可以增加计数。我的问题是,如果我将第三个共享指针指向该对象(不使用复制构造函数或 =operator),那么该指针将不知道该结构,因此如果我删除,则引用计数为 1指针,计数将达到 0,对象将被销毁,而实际上,该对象还有另外两个指针?
-
如果一个共享指针的引用计数为 1,然后创建了多个线程,如果一个线程结束/销毁它,其他可能仍在运行的线程会发生什么?
李>
【问题讨论】:
-
对于 (1),您的意思是:
shared_ptr<T> foo(new T); shared_ptr<T> bar = foo; shared_ptr<T> quux(foo.get());? -
编写共享指针不是一个初学者项目。这就是为什么我们有标准版本。我写了一篇关于人们在实现智能指针时常犯的错误的博客文章:Loki Astari's blog 另外,当你完成后,值得在Code Review进行审查。
-
为什么?如果是为了学习如何做,那么好吧。否则,只需使用
std::unique_ptr和std::shared_ptr- 不要重新发明轮子。
标签: c++ pointers shared-ptr smart-pointers