0

我有两个班级,A和B是这样的:

class A
{
public:
    A(int i)
    {
        this->i = i;
    }
private:
    int i;
};

class B
{
public:
    B()
    {
        i = 0;
        a = new A(i);
        i++;
        // i = 1
        // a->i must be 1
    }

private:
    A* a;
    int i;
};

我尝试在两个对象之间共享一个成员。我想当我在 B 中被修改时,我必须在 A 中被修改。我该怎么做这样的事情?可以参考吗?我希望我很清楚。谢谢。

4

3 回答 3

1

在不创建循环依赖的情况下,您需要两个类共享/已知的第三个对象(如果需要,您可以使用某些东西的地址)。

虽然在许多情况下我更喜欢引用指针,但我倾向于避免引用,因为当共享对象的生命周期难以决定时,它们不一定是共享数据的好选择。Astd::shared_ptr可能很合适。

虽然,它也可能很简单

int x;
A* a = new A(&x);
B* b = new B(&x);

然而,在这个例子中,引用更合适,但考虑到这里的范围没有说明任何关于生命周期的内容ab我会选择所有堆,并且shared_ptr不会偶然发现谁将删除共享内存的问题? ...

#include <memory>
auto x = std::make_shared<int>(0);
A* a = new A(x);
B* b = new B(x);
于 2012-12-16T14:25:36.140 回答
0

就像 Luchian 所说,您需要注意您引用的变量的范围和生命周期。在您的示例中,只要 B 永远不会超过 A,您就可以了。

class A
{
public:
    A(int &i) : m_i(i)
    {
    }
private:
    int &m_i;
};

class B
{
public:
    B()
    {
        i = 0;
        a = new A(i);
        i++;
        // i = 1
        // a->i must be 1
    }

private:
    A* a;
    int i;
};
于 2012-12-16T14:26:12.503 回答
0

是的,可以通过引用来实现,但是您会遇到范围界定问题。

您还可以std::shared_ptr在类之间共享变量。

于 2012-12-16T14:17:19.380 回答