簡體   English   中英

使用指向 object 的指針作為另一個 object 的成員

[英]Using a pointer to an object as a member of another object

出於某些原因,我希望 class A 的多個實例都可以訪問 class B 的單個實例。B 具有公共成員函數,允許 A 的對象從 B 獲取數據,但不能更改它。 我試圖通過在我的主 function 中聲明 B 的 object 來做到這一點,然后在我聲明類型 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 的返回值有時正確有時不正確。 我是否錯誤地處理了指針? 有一個更好的方法嗎?

A構造函數中,參數b是一個局部變量,它的生命周期在構造函數 function 結束時結束。 您不能保存指向它的指針,該指針將立即失效。

要么使用智能指針,要么使用引用構造函數初始化列表

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM