我正在使用C++ 11一個工廠模式,其是在我的主()函數的範圍和被調用這樣的:C++壽命返回智能指針
histogram_requests -> AddNewPostfix(Postfix_factory :: get_postfix("Layers", ntuple_reader));
的Postfix_factory :: get_postfix()是一個靜態成員函數,返回std :: unique_ptr <後綴>。一個示例返回值是:
return std :: move(std :: unique_ptr<Postfix>(new Layers_postfix(ntuple_reader_p)));
我的第一個問題是,如果這實際上是有效的嗎?返回的指針是否在main()範圍的末尾被銷燬?
第二件事是我想把這個指針傳遞給一個函數。什麼是正確的做法?我的程序編譯當我設置AddNewPostFix()到任何一個的std ::的unique_ptr的自變量類型或的std ::的unique_ptr & &但未能作爲一個簡單的參考。我不想讓我的AddNewPostFix()意外刪除我的指針中的數據,但我不確定這些是否安全。任何人都可以告訴我如何正確和安全地做到這一點?
我其實有點困惑。如果沒有** std :: move()**,我的唯一指針中的數據不會被刪除(因爲函數返回後讓unique_ptr的實例超出範圍) –
@AdamHunyadi:是的,它會被刪除。這就是它的重點。但到了這個時候,'someFunction'已經完成了它的工作,所以沒有問題,除非'someFunction'決定在其他地方存儲一個指向'T'的指針,這將是非常邪惡的('global_pointer =&t' )。 –