要初始化的基準構件,而不傳遞給含類的構造的外部實體的引用,一個工廠的方法可用於,例如:自毀基準部件初始化
struct B
{
B() : a(new_a()) {}
// factory
a& new_a()
{
A* a = new A;
return *a;
}
A& a;
};
然而當B
的生命期結束時,B::a
當然不會被銷燬,因爲它是一個參考。但B
之外沒有訪問B::a
。所以這是一個內存泄漏。爲了解決這個問題一個可以打電話從B::~B()
B::~B() {a.~A();}
A::~A()
但我已閱讀手動調用析構函數是一個沒有沒有,所以把以A::~A()
來電的B::~B()
析構函數放平,或不是嗎?
有更清潔的解決方案嗎?
我認爲你需要重新考慮你的設計。例如,*爲什麼*你必須有一個參考?難道你沒有一個實際的實例(這是我推薦的)?還是一個指針(或者說是一個智能指針)? –
'return * a;'引用指針。 '''a''''''''''''''''''''''''''''''''',''''A''的一個副本被捲起,但''''''A'被泄漏。 – user4581301
@ user4581301沒有。 'new_a'返回一個引用(假設返回類型應該是'A&'不''a&')並且直接綁定到'B :: a'。沒有副本。 –