【问题标题】:Using a pointer to an object as a member of another object使用指向一个对象的指针作为另一个对象的成员
【发布时间】:2023-01-19 14:30:51
【问题描述】:

出于某些原因,我希望 A 类的多个实例都可以访问 B 类的单个实例。B 具有公共成员函数,允许 A 的对象从 B 获取数据,但不能更改它。我试图通过在我的主函数中声明一个 B 的对象,然后在我声明 A 类型的对象时将它传递给构造函数来做到这一点。

void main () {
  B obj_b;
  A A1(obj_b);
  A A2(obj_b);
  A A3(obj_b);  

  cout << A1.getfoo() << endl;
  cout << A2.getfoo() << endl;
  count << A3.getfoo() << endl;
}

class B{
  private:
    int foo = 9;
  public:
    int getfoo(){return foo;}
};

class A {
  private:
    B *bptr;

  public:
    A(B b){ this->bptr = &b; }
    int getfoo(){ return bptr->getfoo(); }
};

这编译并运行,但我得到非常奇怪的结果。 getfoo 的返回值有时正确有时不正确。我是否错误地处理了指针?有一个更好的方法吗?

【问题讨论】:

    标签: c++ function class object pointers


    【解决方案1】:

    A 构造函数中,参数 b 是一个当地的变量,其生命周期在构造函数结束时结束。您不能保存指向它的指针,该指针将立即失效。

    要么使用智能指针, 或使用参考构造函数初始化列表:

    class A
    {
    public:
        // Pass by reference
        A(B& b)
            : b{ b }  // Initialize the member variable b with the argument b
        {
            // Empty body
        }
    
    private:
        B& b;  // Reference to a B object
    };
    

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2016-02-25
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多