2015-12-14 85 views
-2

我目前正在學習智能指針,並在我的代碼中實際使用它們。不過,我想重讀智能指針的文件和跨越這條線在MSDN(https://msdn.microsoft.com/de-de/library/hh279669.aspx)傳來:初始化智能指針成員變量的正確方法是什麼?

// When initialization must be separate from declaration, e.g. class members, 
// initialize with nullptr to make your programming intent explicit. 
shared_ptr<Song> sp5(nullptr); 
//Equivalent to: shared_ptr<Song> sp5; 

現在我在我的頭文件使用此:

shared_ptr<Song> sp5 = NULL; 

我試了一下現在有一段時間了,但我真的無法讓MSDN例子在沒有出現大量錯誤的情況下工作,但是當試圖找出問題時,並沒有太多的資源,甚至告訴我初始化智能指針這個。

是否真的有必要像MSDN建議的那樣解決它?

+0

你使用什麼編譯器? * nullptr *是一個C++ 11功能,因此您必須啓用C++ 11支持... –

+3

@PaoloM:所以是'shared_ptr'。 –

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建最小,完整和可驗證示例。 – luk32

回答

1

對於初始化我只會寫。

shared_ptr<Song> sp5; 

再後來分配一個新的指針或使用

sp5.reset(new Song()); 

shared_ptr<Song> sp5(nullptr); 

工作,說明你想要的sharded_ptr是在一開始空Inizializing它。 但我個人會建議你,當你處理null shared_ptrs來檢查它們是否爲空之前使用它們。 shared_ptr operator bool檢查指針是否爲空。 http://www.cplusplus.com/reference/memory/shared_ptr/operator%20bool/

2

不,沒有必要。沒有「正確」的初始化智能指針的方法。

正如評論本身所表明的那樣,您可以放心地忽略初始者。

相關問題