2011-10-06 63 views
4

我的一些同事喜歡在構造函數初始化列表中明確地初始化std::auto_ptr0,但是它的構造函數中將被初始化爲0而不需要任何顯式的初始化。那麼是否有任何理由去做?我應該顯式地初始化auto_ptr嗎?

#include <memory> 

class A 
{ 
    A() : SomePtr(0) 
    { 
    } 

private: 
    std::auto_ptr<SomeType> SomePtr; 
}; 
+0

可能的重複[是否有任何需要分配空指針到std :: auto_ptr](http://stackoverflow.com/questions/3664145/is-there-any-need-to-assign-null-pointer- to-stdauto-ptr) –

回答

9

不,std::auto_ptr默認構造函數正是這麼做的,這樣它明確地是沒有必要的。無論如何,這是一個風格問題,你應該保持一致。例如,你會顯式調用構造函數初始化列表中的成員向量的默認構造函數嗎?

作爲一個方面說明,std::auto_ptr在即將到來的標準

+4

「即將到來」的標準已經發生,現在是「最新」的標準! Hoorah,歡呼!當然,它還沒有*實施*。 –

+2

可能應該提到unique_ptr是替換 –

+0

好吧,唯一的原因是樣式和一致性。 – ks1322

0

心理學​​已被棄用。

對於內置類型,您可能已經知道它們是未初始化的,除非您明確這樣做。對於課程而言,情況並非如此。

A力求一致性結果在各處顯式初始化。這允許您忘記A::SomePtr是內置類還是類類。相當無用,恕我直言,因爲內置類型的數量非常有限。

0

一個原因可能是清晰的,但應該是唯一的原因。我自己寧願不寫不必要的初始化,特別是如果這完全避免了爲周圍的類編寫默認構造函數並讓編譯器完成它的工作。儘管這只是一個風格問題,但我認爲太多偏執狂甚至會損害代碼的清晰度。

相關問題