在两个对象之间共享成员

时间:2012-12-16 14:14:05

标签: c++

我有两个班,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中进行修改。 我怎么能做那样的事情?可以参考吗? 我希望我很清楚。 感谢。

3 个答案:

答案 0 :(得分:1)

如果不创建循环依赖关系,则需要第三个对象(如果需要,可以使用某个地址),这两个类共享/已知。

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

虽然,它也可能像

一样简单
int x;
A* a = new A(&x);
B* b = new B(&x);

但是,在这个示例中,引用更合适,但是考虑到这里的范围没有说明ab的生命周期,我会使用所有堆和a { shared_ptr不会偶然发现谁将删除共享内存的问题? ...

#include <memory>
auto x = std::make_shared<int>(0);
A* a = new A(x);
B* b = new B(x);

答案 1 :(得分:0)

是的,可以通过参考,但是你会遇到范围问题。

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

答案 2 :(得分: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;
};