當你在一個函數內動態創建物件時,使用 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物件才會被釋放。
沒有留言:
張貼留言