我在我的應用程序設計中使用shared_ptr,並且我有越來越多的對象變成堆分配而不是堆棧上的簡單對象(或更復雜對象的聚集)的趨勢。
而不是簡單的(但有可能Foo :: bar會在更復雜的情況下變成懸掛參考)... shared_ptr基於設計問題
struct Bar { };
struct Foo { Foo(Bar& bar) : bar(bar) { }; Bar& bar; };
int main() {
Bar bar;
Foo foo(bar);
// ...
}
... I need to do ...
struct Bar { };
struct Foo { Foo(shared_ptr bar) : bar(bar) { }; shared_ptr<Bar> bar; };
int main() {
shared_ptr<Bar> bar = make_shared<Bar>();
Foo foo(bar);
// ...
}
... because I want to avoid of manual objects life-time tracking
Did I missed point in shared_ptr usage or this is pay for automatic life-time management ? Or maybe this is bad design sign ?
'shared_ptr'應該謹慎使用。給定對象的生命週期是功能行爲的組成部分。如果你沒有明確的行爲規範,你就不會得到任何地方......如果你這樣做,那麼你不需要在任何地方使用'shared_ptr'。它不是靈丹妙藥,或者是子彈,有時候你會發現自己像瘋了一樣泄漏內存,因爲你有引用循環,不知道從哪裏開始,因爲你的協作圖很混亂:/ – 2011-03-22 14:53:39
什麼是你的點?你想與shared_ptr一起工作,現在你是。由於main()是一個所有者,他應該有一個shared_ptr。使用shared_ptr比使用引用更加繁瑣。 – stefaanv 2011-03-22 14:56:28
@Matthieu:在考慮所有者(shared_ptr)和用戶(weak_ptr)並使用分層方法時,shared_ptr可以真正幫助您。沒有設計,你只是用可能的內存泄漏來替換可能的懸掛指針 – stefaanv 2011-03-22 15:00:06