可能性の重複:オブジェクトの宣言と定義
class Foo { public: Foo(); }; int main(){ Foo *f= new Foo; }
Foo *f= new Foo;
との違いは何であるか:私は誰かがこのようなコンストラクタを使用して見ました
Do the parentheses after the type name make a difference with new?
Foo *f= new Foo();
?
可能性の重複:オブジェクトの宣言と定義
class Foo { public: Foo(); }; int main(){ Foo *f= new Foo; }
Foo *f= new Foo;
との違いは何であるか:私は誰かがこのようなコンストラクタを使用して見ました
Do the parentheses after the type name make a difference with new?
Foo *f= new Foo();
?
まず、あなたが与えるコードはコンパイルされません。あなたは
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()
を入力するに違いはありません。
これは本当にC++ですか?どちらも、(両方のリターン 'Fooの*を')コンパイルされません。 – kennytm
@KennyTMは、コンパイルエラーを取り除くと、ポストを編集しました。 – iammilind