通过C++中的指针在对象之间共享数据

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"会发生什么?是否存在悬挂指针给其他同行的问题?

Ker*_* SB 6

如果你有一个包含指针成员的类,

class Foo
{
  Bar * mp_bar;
};
Run Code Online (Sandbox Code Playgroud)

然后在破坏一个Foo对象时,除了指针及其包含的对象超出范围之外,没有任何其他事情发生.它p与以下函数结束时发生的情况相同:

void bar()
{
  int * p;
}
Run Code Online (Sandbox Code Playgroud)

您可能要问的问题是"指针所指向的对象会发生什么".这是一个完全不同的问题,答案是"没有".

(所以通常当你有一个包含指针成员的类时,你应该仔细考虑谁拥有可能需要清理的任何资源.)


既然你在问题中提到了"析构函数"这个词,那就让我们一劳永逸地拼出来:

指针类型对象没有析构函数.当指针超出范围时,没有自动调用delete.