Ist "x = new (Foo)" dasselbe wie "x = new Foo" für ein beliebiges Foo?

8

Ich betrachte einen älteren Code und stolperte auf x=new(Foo); (beachten Sie die Klammern um den angegebenen Typ). Ich habe Variationen getestet und es scheint das gleiche wie x=new Foo;

zu sein

Foo ist eine Nicht-POD-Datenstruktur. Ein Programm für externe Speicherlecks markiert die Zeile - es reserviert Speicher für einen CORBA-out-Parameter, so dass der Aufrufer sich um das Löschen kümmern sollte, aber das ist ein separates Problem mit vielen indirekten Ebenen.

Ist meine Analyse richtig und akzeptabel?

    
joemooney 16.01.2013, 00:24
quelle

2 Antworten

5

Wenn der Name des Typs Klammern hat, muss er in Klammern stehen. Andere Typen können ebenfalls eingeschlossen werden.

Beispiel, in dem Klammern erforderlich sind:

%Vor%

Von cppreference.com: neuer Ausdruck

    
Csq 16.01.2013, 00:44
quelle
10

Es ist richtig, aber der Stil ist zumindest ungewöhnlich.

Klammern um einen vollständigen Typnamen sind manchmal erlaubt, aber in diesem Fall sind sie überflüssig. Es ist, als würde man Klammern um einen Ausdruck legen, der nicht benötigt wird. Vielleicht wäre die nächste Analogie

%Vor%

Verwirrenderweise werden die Parens für den Operator sizeof benötigt, wenn Sie einen Typnamen übergeben, aber nicht, wenn Sie ihm einen Ausdruck übergeben. Persönlich sehe ich das als eine Inkonsistenz, und würde nicht wählen, es auf den Rest der Sprache zu verbreiten.

    
Potatoswatter 16.01.2013 00:28
quelle

Tags und Links