如何让多个对象共享值?

时间:2019-07-12 20:57:02

标签: c++ object pointers segmentation-fault

在C ++中,我有多个相同类的对象。该类具有一些变量,并且实际代码有点复杂,所以我们说只有一个:int iMyAge。在正常情况下,我希望它们具有单独的值-很明显,就像对象已经做到的那样。但是我还希望能够链接两个单独对象的两个变量,例如,让对象1自动采用对象2的变量int iMyAge

我尝试使用公共变量,并为要在对象之间链接的变量设置了两个指针。一个是对象的值,另一个是应该使用该值的指针。因此,我将拥有int * iMyAgeint * iFollowAge,然后:

  1. 如果要将对象的变量用作指针,请将iFollowAge设置为iMyAge
  2. 如果我要使用该对象的值,请
  3. iFollowAge设置为其他对象的iMyAge指针

在代码中,如果我想获取当前感兴趣的年龄(对象本身的“年龄”或链接到的其他对象的年龄),请使用{{1 }},如果我想访问或更改对象自己的“年龄”。

但是用这种方法我会遇到分段错误,尽管这是我能想到的最优雅的解决方案,但由于使用公有变量是不好的做法,我还是很犹豫。

关于为什么会发生这种情况或什么是替代解决方案的任何想法?

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;
}