new*_*wID 0 c++ constructor destructor shared-ptr
我有几个通过指针共享数据的对象.指针参数是在构造函数中发送的,如下所示.
class A
{
public:
Shared* pB = new Shared();
User* object1 = new User(pB);
User* object2 = new User(pB);
}
class User
{
public:
User(Shared* pB) {m_sharedB = pB};
private:
Shared* m_sharedB;
}
class Shared
{
public:
struct Account
{
int account_number;
}
void method(){...};
}
Run Code Online (Sandbox Code Playgroud)
我的问题与C++析构函数有关.当object1被删除时,成员变量"m_sharedB"会发生什么?是否存在悬挂指针给其他同行的问题?
如果你有一个包含指针成员的类,
class Foo
{
Bar * mp_bar;
};
Run Code Online (Sandbox Code Playgroud)
然后在破坏一个Foo对象时,除了指针及其包含的对象超出范围之外,没有任何其他事情发生.它p与以下函数结束时发生的情况相同:
void bar()
{
int * p;
}
Run Code Online (Sandbox Code Playgroud)
您可能要问的问题是"指针所指向的对象会发生什么".这是一个完全不同的问题,答案是"没有".
(所以通常当你有一个包含指针成员的类时,你应该仔细考虑谁拥有可能需要清理的任何资源.)
既然你在问题中提到了"析构函数"这个词,那就让我们一劳永逸地拼出来:
指针类型对象没有析构函数.当指针超出范围时,没有自动调用
delete.