C++ 在两个对象之间共享成员
我有两个班,A和B是这样的:C++ 在两个对象之间共享成员,c++,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:
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中被修改。
我怎么能做那样的事?可以参考吗?
我希望我是清楚的。
谢谢。是的,可以参考,但随后会遇到范围界定问题
您还可以使用
std::shared_ptr
在类之间共享变量。在不创建循环依赖项的情况下,您需要两个类共享/已知的第三个对象(如果需要,可以使用某个对象的地址)
虽然在许多情况下我更喜欢引用指针,但我倾向于避免引用,因为当共享对象的生命周期难以确定时,它们不一定是共享数据的好候选对象。std::shared_ptr可能是一个很好的选择
不过,它也可能像
int x;
A* a = new A(&x);
B* b = new B(&x);
然而,在本例中,引用更合适,但鉴于此处的范围没有说明a
和b
的生命周期,我将使用所有堆和共享\u ptr
以避免遇到谁将删除共享内存的问题
#包括
自动x=std::使_共享(0);
A*A=新的A(x);
B*B=新的B(x);
正如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;
};
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;
};