當你在一個函數內動態創建物件時,使用 std::make_shared
是一個非常合適的選擇,因為它會返回一個 std::shared_ptr
,這樣你就可以確保物件的生命週期在超出該函數作用域後仍然有效,並且直到不再有 shared_ptr
引用它時才會被釋放。
如果你希望確保在函數離開時物件不會被釋放,可以將該 std::shared_ptr
返回,或者將其存儲在函數外部的變量中。
用 std::make_shared
創建物件並確保其不會在函數結束時被釋放的方式:
1. 返回 shared_ptr
給外部
將 std::shared_ptr
返回給外部,這樣外部可以繼續持有該物件的引用,直到不再需要它時才會釋放。
解釋:
std::make_shared<MyClass>()
:在createObject
函數內,使用std::make_shared
創建一個MyClass
物件,並將它包裝在std::shared_ptr
中。返回
shared_ptr
:將創建的std::shared_ptr
返回給main
函數。當main
函數接收到返回值後,myObject
將繼續保持對MyClass
物件的引用。物件不會被釋放:只要
main
函數中的myObject
還持有shared_ptr
,該物件就不會被釋放。只有當main
中的shared_ptr
被銷毀(例如,當函數結束時)或者不再引用該物件時,MyClass
物件才會被釋放。
2. 將 shared_ptr
存儲在外部變量中
如果你希望在函數外部持有這個物件,可以將 shared_ptr
儲存在函數外部的變量中,而不是返回。
解釋:
將
shared_ptr
引用傳遞給外部:在這個版本中,createObject
函數通過引用參數outObject
將創建的shared_ptr
傳遞給外部。外部持有
shared_ptr
:main
函數接收shared_ptr
並可以繼續使用這個物件。物件生命週期管理:這樣,當
main
中的shared_ptr
被銷毀或不再引用物件時,MyClass
物件才會被釋放。
沒有留言:
張貼留言