假设我有:
class InnerClass { };
class MyClass {
public:
std::shared_ptr<InnerClass> innerSharedPtr;
};
void main() {
std::shared_ptr<MyClass> mrSharedPtr = std::make_shared<MyClass>();
}
如果我想重置mrSharedPtr,我需要重置它的shared_ptr成员吗?
mrSharedPtr->innerSharedPtr.reset();
mrSharedPtr.reset();
如果我 mrSharedPtr.reset(),它会将引用计数减少到 0,但这是否会将innerSharedPtr 减少到 0?如果不是,是否意味着innerSharedPtr仍保留在内存中?
重置后无法查看引用计数
std::shared_ptr::reset
(来自cppreference):
如果
已经拥有一个对象,并且是最后一个*this
拥有该对象,则该对象将通过拥有的删除器被销毁。shared_ptr
当
MyClass
实例被销毁时,其中一部分是销毁 innerSharedPtr
成员。当此 shared_ptr
是指向该 InnerClass
的最后一个共享指针时,该实例也将被销毁。
无需在
mrSharedPtr->innerSharedPtr.reset();
之前致电mrSharedPtr.reset();
。