首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过C++中的指针在对象之间共享数据

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

Stack Overflow用户
提问于 2011-06-22 05:42:16
回答 5查看 1.5K关注 0票数 0

我有几个对象,它们通过指针共享一个数据。指针参数是通过构造函数发送的,如下所示。

代码语言:javascript
复制
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“会发生什么?是否存在其他对等点的指针悬空问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-22 05:51:39

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

代码语言:javascript
复制
class Foo
{
  Bar * mp_bar;
};

然后,在销毁Foo对象时,除了指针及其包含的对象超出作用域之外,不会发生任何其他事情。这与以下函数末尾的p相同:

代码语言:javascript
复制
void bar()
{
  int * p;
}

你可能想问的是“指针所指向的对象发生了什么”。这是一个完全不同的问题,答案是“什么都没有”。

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

既然你在问题中提到了“析构函数”这个词,让我们一劳永逸地说清楚:

指针类型对象没有析构函数。当指针超出作用域时,将不会自动调用 delete.

票数 6
EN

Stack Overflow用户

发布于 2011-06-22 05:48:34

析构原始指针变量是一种无操作(read more)。共享对象仍将可用。

票数 0
EN

Stack Overflow用户

发布于 2011-06-22 05:53:00

当object1被删除时,m_sharedB指向的内存将不会被释放,因为您没有为User类提供析构函数。这就让包含它的类(类A)来管理共享指针的生命周期,确保一旦不再存在对它的引用(即,共享相同共享指针的所有用户实例都是死的),它就会被正确删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6432348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档