重複の可能性:
タイプ名の後の括弧はnewと違いがありますか?
私は誰かがこのようなコンストラクターを使用しているのを見ました:
class Foo
{
public: Foo();
};
int main(){
Foo *f= new Foo;
}
Foo *f= new Foo;
との違いは何Foo *f= new Foo();
ですか?
重複の可能性:
タイプ名の後の括弧はnewと違いがありますか?
私は誰かがこのようなコンストラクターを使用しているのを見ました:
class Foo
{
public: Foo();
};
int main(){
Foo *f= new Foo;
}
Foo *f= new Foo;
との違いは何Foo *f= new Foo();
ですか?
これらの2つの形式の初期化に違いはありません。コンストラクターがである場合、どちらもデフォルトのコンストラクターを呼び出しますpublic
。
まず、あなたが与えるコードはコンパイルされません。あなたが持っている必要があります
Foo* f = new Foo()
アスタリスクに注意してください。
それ以外の場合、2 つの呼び出しは非プリミティブ型に対して同じ結果になります。私は () 構文がスタイルガイドによって強制されている会社で働いてきましたが、それには正当な理由があります: プリミティブ型の場合、違いがある可能性があります:
int* p = new p;
cout << *p << endl; // the value is arbitrary i.e. behavior is undefined.
int* q = new int();
cout << *q << endl; // outputs 0.
ここでは明らかかもしれませんが、たとえば Foo が typedef であると想像してください。したがって、私のアドバイスは、常に Foo() 構文を使用することです。
私たちの例はおそらくコンパイルされないでしょう.ポインタを宣言する必要があります.
Foo *f = new Foo;
new Foo
どちらnew Foo()
も引数なしでコンストラクターを実行するため、入力に違いはありません。