在C ++中,我有多个相同类的对象。该类具有一些变量,并且实际代码有点复杂,所以我们说只有一个:int iMyAge
。在正常情况下,我希望它们具有单独的值-很明显,就像对象已经做到的那样。但是我还希望能够链接两个单独对象的两个变量,例如,让对象1自动采用对象2的变量int iMyAge
。
我尝试使用公共变量,并为要在对象之间链接的变量设置了两个指针。一个是对象的值,另一个是应该使用该值的指针。因此,我将拥有int * iMyAge
,int * iFollowAge
,然后:
iFollowAge
设置为iMyAge
iFollowAge
设置为其他对象的iMyAge指针在代码中,如果我想获取当前感兴趣的年龄(对象本身的“年龄”或链接到的其他对象的年龄),请使用{{1 }},如果我想访问或更改对象自己的“年龄”。
但是用这种方法我会遇到分段错误,尽管这是我能想到的最优雅的解决方案,但由于使用公有变量是不好的做法,我还是很犹豫。
关于为什么会发生这种情况或什么是替代解决方案的任何想法?
答案 0 :(得分:3)
您可以为此使用std::shared_ptr
。
#include <iostream>
#include <memory>
class ThingThatHasInt
{
protected:
std::shared_ptr<int> myInt;
public:
ThingThatHasInt (int i) : myInt (std::make_shared<int>(i))
{ ; }
int getInt() const
{ return *myInt; }
void setInt(int i)
{ *myInt = i; }
void marry(ThingThatHasInt const& other)
{ myInt = other.myInt; }
void divorce()
{ myInt = std::make_shared<int>(*myInt); }
};
int main()
{
ThingThatHasInt a(10), b(20);
std::cout << "a=" << a.getInt() << ", b=" << b.getInt() << std::endl;
b.setInt(5);
std::cout << "a=" << a.getInt() << ", b=" << b.getInt() << std::endl;
a.marry(b);
std::cout << "a=" << a.getInt() << ", b=" << b.getInt() << std::endl;
b.setInt(20);
std::cout << "a=" << a.getInt() << ", b=" << b.getInt() << std::endl;
a.setInt(30);
std::cout << "a=" << a.getInt() << ", b=" << b.getInt() << std::endl;
b.divorce();
std::cout << "a=" << a.getInt() << ", b=" << b.getInt() << std::endl;
a.setInt(40);
std::cout << "a=" << a.getInt() << ", b=" << b.getInt() << std::endl;
b.setInt(50);
std::cout << "a=" << a.getInt() << ", b=" << b.getInt() << std::endl;
}