C++ 查找引用共享\u ptr的弱\u ptr

C++ 查找引用共享\u ptr的弱\u ptr,c++,c++11,shared-ptr,smart-pointers,weak-ptr,C++,C++11,Shared Ptr,Smart Pointers,Weak Ptr,有没有办法找出共享ptr所引用的弱ptr的数量 unique()/use\u count()可用于查找共享\u ptr,但是否存在用于查找引用弱\u ptr的类似构造 我只想在没有弱\u ptr引用它的情况下释放共享\u ptr所持有的资源。所以,在将来的某个时候,如果我尝试从这个弱的ptr创建一个共享的ptr,我就不会得到一个空的ptr 目前在C++11中是否可能实现这一点?否。 做这件事没有接口,因为它会漏掉整个要点 如果没有std::shared_ptr引用该资源,则会释放该资源 通过使用

有没有办法找出共享ptr所引用的弱ptr的数量

unique()/use\u count()可用于查找共享\u ptr,但是否存在用于查找引用弱\u ptr的类似构造


我只想在没有弱\u ptr引用它的情况下释放共享\u ptr所持有的资源。所以,在将来的某个时候,如果我尝试从这个弱的ptr创建一个共享的ptr,我就不会得到一个空的ptr

目前在C++11中是否可能实现这一点?

否。 做这件事没有接口,因为它会漏掉整个要点

如果没有
std::shared_ptr
引用该资源,则会释放该资源


通过使用
std::weak_ptr
您特别允许释放您的资源。如果这不是你想要的,就不要使用它。

如果你必须这样做,我会重新检查你的设计“只有在没有弱ptr引用的情况下,我才想释放共享ptr所拥有的资源”。那么为什么不在任何地方使用共享ptr呢?他在技术上走错了路,但问题是公平的,否决票的原因是什么?!当最后一个
shared_ptr
被销毁时,资源将被销毁,但在某些情况下它可能不会被释放。例如,如果资源是用
std::make_shared
分配的,则一些实现可以将控制块和分配对象的内存组合在一起。在这种情况下,如果周围有弱的\u ptr,即使资源在逻辑上被破坏,内存也会泄漏。因此,即使动机是错误的,也需要知道有多少弱PTR存在,这是合理的,并且对于调试可能是有用的purposes@gigabytes虽然是真的,但它是一个实现细节,与使用
std::weak_ptr
的程序并不相关。要求接口知道计数将揭示太多的实现细节,并将限制其他有效的实现。IMHO它对调试不是很有用,因为在您提到的情况下,我希望有一个指向同一控制块的弱指针列表。计数只会告诉你还需要找到多少人。如果您想查询实现细节,请使用实现提供给您的工具(如调试器)。它不是一个实现细节,因为标准允许这种优化,而这正是std::make_shared的主要动机。无论如何,我并不是说该标准应该提供一种查询仍然存在的弱ptr数量的方法。