我有两个班,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中进行修改。 我怎么能做那样的事情?可以参考吗? 我希望我很清楚。 感谢。
答案 0 :(得分:1)
如果不创建循环依赖关系,则需要第三个对象(如果需要,可以使用某个地址),这两个类共享/已知。
虽然我更喜欢在许多情况下引用指针,但我倾向于避免引用,因为当共享对象的生命周期难以决定时,它们不一定是共享数据的良好候选者。 std::shared_ptr
可能是合适的。
虽然,它也可能像
一样简单int x;
A* a = new A(&x);
B* b = new B(&x);
但是,在这个示例中,引用更合适,但是考虑到这里的范围没有说明a
和b
的生命周期,我会使用所有堆和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;
};