8

私はいくつかのレガシーコードを見ていて、出くわしましx=new(Foo);た(提供されたタイプの周りのかっこに注意してください)。バリエーションをテストしましたが、同じように見えますx=new Foo;

Foo は非 POD データ構造です。一部の外部メモリ リーク プログラムが行にフラグを立てています - CORBA の out パラメータにメモリを割り当てているため、呼び出し元が削除を処理する必要がありますが、これは間接的なレイヤーが多数ある別の問題です。

私の分析は正しいですか、それは受け入れられるスタイルですか?

4

2 に答える 2

10

それは正しいですが、スタイルは少なくとも珍しいものです。

完全な型名を括弧で囲むことが許可される場合もありますが、この場合は無関係です。これは、不要な場所で式を括弧で囲むようなものです。おそらく最も近い例えは

return( 0 ); /* looks like a function, but isn't */

紛らわしいことにsizeof、型名を渡すときは演算子に必要ですが、式を渡すときは必要ありません。個人的には、それは矛盾していると考えており、他の言語に広めることを選択しません。

于 2013-01-16T00:28:48.057 に答える
5

型の名前に括弧が含まれている場合は、括弧で囲む必要があります。他の種類も同梱可能です。

括弧が必要な例:

new int(*[10])();    // parser error: parsed as (new int) (*[10]) ()
new (int (*[10])()); // OK: allocates an array of 10 pointers to functions

cppreference.com から: 新しい

于 2013-01-16T00:44:51.187 に答える