Lets say I have:
class InnerClass { };
class MyClass {
public:
std::shared_ptr<InnerClass> innerSharedPtr;
};
void main() {
std::shared_ptr<MyClass> mrSharedPtr = std::make_shared<MyClass>();
}
If I want to reset mrSharedPtr, do I need to reset it's shared_ptr members?
mrSharedPtr->innerSharedPtr.reset();
mrSharedPtr.reset();
If I mrSharedPtr.reset(), it reduces reference count to 0, but does that reduce innerSharedPtr to 0? if not does that mean innerSharedPtr remains in memory?
There's no way to check the reference count after resetting
std::shared_ptr::reset(from cppreference):When the
MyClassinstance is destroyed, part of that is to destroy theinnerSharedPtrmember. When thisshared_ptrwas the last shared pointer to thatInnerClass, that instance will be destroyed as well.There is no need to call
mrSharedPtr->innerSharedPtr.reset();beforemrSharedPtr.reset();.