我有几个对象,它们通过指针共享一个数据。指针参数是通过构造函数发送的,如下所示。
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(){...};
}我的问题与C++析构函数有关。当object1被删除时,成员变量"m_sharedB“会发生什么?是否存在其他对等点的指针悬空问题?
发布于 2011-06-22 05:51:39
如果您有一个包含指针成员的类,
class Foo
{
Bar * mp_bar;
};然后,在销毁Foo对象时,除了指针及其包含的对象超出作用域之外,不会发生任何其他事情。这与以下函数末尾的p相同:
void bar()
{
int * p;
}你可能想问的是“指针所指向的对象发生了什么”。这是一个完全不同的问题,答案是“什么都没有”。
(因此,通常当您有一个包含指针成员的类时,您应该仔细考虑谁拥有可能需要清理的任何资源。)
既然你在问题中提到了“析构函数”这个词,让我们一劳永逸地说清楚:
指针类型对象没有析构函数。当指针超出作用域时,将不会自动调用
delete.
发布于 2011-06-22 05:48:34
析构原始指针变量是一种无操作(read more)。共享对象仍将可用。
发布于 2011-06-22 05:53:00
当object1被删除时,m_sharedB指向的内存将不会被释放,因为您没有为User类提供析构函数。这就让包含它的类(类A)来管理共享指针的生命周期,确保一旦不再存在对它的引用(即,共享相同共享指针的所有用户实例都是死的),它就会被正确删除。
https://stackoverflow.com/questions/6432348
复制相似问题