4

私の同僚の中には、コンストラクターの初期化リストで明示的に初期化std::auto_ptrすることを好む人もいますが、明示的な初期化なしでコンストラクターで初期化されます。では、それを行う理由はありますか?00

#include <memory>

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

private:
  std::auto_ptr<SomeType> SomePtr;
};
4

3 に答える 3

9

いいえ、デフォルトのコンストラクターstd::auto_ptrはまさにそれを行うので、明示的に行う必要はありません。いずれにせよ、それはスタイルの問題であり、一貫性を保つ必要があります。たとえば、コンストラクターの初期化リストでメンバー ベクトルの既定のコンストラクターを明示的に呼び出しますか?

補足としてstd::auto_ptr、次の標準では非推奨です

于 2011-10-06T09:23:51.937 に答える
0

心理学。

組み込み型の場合、明示的に行わない限り、それらが初期化されていないことはおそらくすでにわかっているでしょう。クラスの場合、これは当てはまりません。

一貫性を保つために努力すると、どこでも明示的な初期化が行われます。A::SomePtrこれにより、 が組み込み型かクラス型かを忘れることができます。組み込み型の数がかなり限られているため、かなり役に立ちません。

于 2011-10-06T09:27:35.137 に答える
0

理由の 1 つは明快かもしれませんが、それが唯一の理由です。私自身は、不要な初期化を記述しないことを好みます。特に、周囲のクラスのデフォルト コンストラクターを記述する必要がまったくなく、コンパイラーにその仕事を任せる場合はなおさらです。それは単なるスタイルの問題ですが、過剰なパラノイアはコードの明瞭さを損なうことさえあると思います。

于 2011-10-06T09:28:49.707 に答える