2011-10-06 11 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]にnullポインタを割り当てる必要はありませんか?(http://stackoverflow.com/questions/3664145/is-there-any-need-to-assign-null-pointer- to-stdauto-ptr) –

答えて

9

はありません、std::auto_ptrのデフォルトコンストラクタは、まさにそのため、明示的にそれをやってする必要はありません。いずれにせよ、それはスタイルの問題であり、一貫していなければなりません。たとえば、コンストラクタの初期化リストでメンバーベクトルのデフォルトのコンストラクタを明示的に呼び出すとしますか?サイドノートとして

std::auto_ptrは今後の標準

+4

"今後の"標準が起こった、それは現在の "最新の"標準です!フアラと応援!確かに、まだ実装されていない*。 –

+2

はおそらくunique_ptrが置換えであることを言及するべきです –

+0

いいえ、唯一の理由はスタイルと一貫性です。 – ks1322

0

心理学​​で廃止されました。

ビルトインタイプの場合は、すでにを知っている可能性があります。明示的に指定しない限り、初期化されません。クラスの場合、これは当てはまりません。

一貫性を維持しようとすると、どこでも明示的に初期化されます。これにより、A::SomePtrが組み込み型かクラス型かを忘れることができます。組み込み型の量が非常に限られているので、かなり役に立たない、imho。

0

1つの理由はわかりやすいかもしれませんが、それは唯一のはずです。私は自分自身が不必要な初期化を書かないことを好みます。特に、それが周囲のクラスのデフォルトのコンストラクタを作成してコンパイラに任せることができない場合は特にそうです。それは単なるスタイルの問題ではありますが、あまりにも多くの過度のパラノイアは、コードの明瞭性を損なうものでもないと思います。

関連する問題