2011-12-20 16 views
1

可能性の重複:オブジェクトの宣言と定義

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();

+1

これは本当にC++ですか?どちらも、(両方のリターン 'Fooの*を')コンパイルされません。 – kennytm

+0

@KennyTMは、コンパイルエラーを取り除くと、ポストを編集しました。 – iammilind

答えて

1

まず、あなたが与えるコードはコンパイルされません。あなたは

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()構文を使用します。

2

初期化のこれら二つの形式の間には違いありません。どちらも、コンストラクタがpublicであることを考えると、デフォルトのコンストラクタを呼び出します。

+0

ビルトインには違いがあります。 – sbi

+0

@スビー:私は組み込みのものについて話していませんでした。私はもっ​​と精巧でなければならないかもしれません。 – Donotalo

+1

@ iammilind:太字のテキストをどのようにして大幅に改善していますか? – sehe

1

あなたの例では、おそらくコンパイルされません、あなたはポインタ

Foo *f = new Foo; 

を宣言する必要があり、引数なしでコンストラクタを実行し、両方のため、new Fooまたはnew Foo()を入力するに違いはありません。

関連する問題