追踪shared_ptr的所有者?

ATV*_*ATV 7 c++ smart-pointers shared-ptr c++11 c++14

在我们的应用程序中,我们即将(最终......)从原始指针切换到使用C++ 11 smart_ptr模板.

我们的应用程序中偶尔会出现一些错误,其中(非C++)对象在访问then-dealloc'd对象时仍然保留对我们的C++对象的引用,导致过去崩溃.

不确定这是否是一个愚蠢的问题 - 但是有没有办法利用这些smart_ptr对象并" 转储 "仍然保留在C++对象上的对象,而这些对象不再需要持有对它的引用?

我想我要求的是一种smart_ptr<MyClass>在某个时间点列出所有业主的方法.

任何建议非常感谢!

Jes*_*uhl 2

不可以。如果不创建自己的智能指针类来包装std::unique_ptr并std::shared_ptr(忽略已弃用的std::auto_ptr)跟踪此信息,则无法做到这一点。标准类本身不跟踪此信息(成本太高)。

另一种选择是修改标准库实现的代码以跟踪该信息。由于您可以继续使用标准名称,因此对您的代码的侵入性较小。但可能比仅仅包装类并使用包装器更棘手。