2013-04-24 18 views
3

我有以下設置(簡體):能以某種方式從私有類中檢索「主機實例」嗎?

class A { 
    public: 
     void doBar() { B b; b.bar(); } 

    private: 
     int foo; 

     class B { 
      public: void bar() { /* do somehting with foo */ } 
     }; 
}; 

現在,VS告訴我:

非靜態成員引用必須是相對於特定對象

好,好吧,這聽起來很合理。但是,由於此類B對於A是私有的,我可以確定它永遠不會在A(特定)實例的實例之外使用(好吧,A的靜態方法是例外)。

因此,底線是否有任何機會從B的方法獲得當前實例A,即B b實例化的實例?我特別尋找一個乾淨的解決方案,否則我只是通過參考。

+1

不,這是C++,不是java。將它傳遞給B的ctor – kassak 2013-04-24 11:19:06

+1

B類無法知道它屬於哪個A類實例。只需通過參考! – 2013-04-24 11:19:56

回答

2

在另一個類中聲明一個類不會創建「包含」,只能是類聲明的範圍。一般來說,您的B對象不包含在A對象中,除非您通過相互引用的方式使對象成爲對象。

所以,不; B無法確定哪個實例創建它,因爲這種情況沒有什麼特別之處。

思考一下:B對象是在你的例子中的堆棧上創建的,但它可能是堆分配的。 A對象也可能是在堆上用'new',堆棧上,自定義堆上,或者通過'placement-new'創建的。內存中的兩個對象之間完全沒有關係。

相關問題