2013-05-16 11 views
13

In C++ 11 N3485 5.3.5.1 dice:C++ 11 Cancella il tipo di classe?

L'operando [di delete] deve essere un puntatore di opporsi tipo o di una classe di tipo. Se di tipo classe, l'operando viene convertito contestualmente in un puntatore al tipo di oggetto.

Che cosa è un esempio di tale utilizzo (l'operando è di tipo classe)?

+0

Si intende un esempio o un esempio che mostra che è utile? – zch

+0

Qualsiasi cosa farà, ma utile è preffered. –

+0

Qualcuno sa, perché la formulazione è cambiata tra n3376 e n3485? Non riesco a trovare alcuna informazione correlata ... – ForEveR

risposta

10

Se del tipo di classe, l'operando viene contestualmente convertito in modo implicito un puntatore al tipo di oggetto.

Quindi, è possibile utilizzare delete sull'oggetto, ma solo quando questo tipo ha un operatore di conversione implicito sul puntatore.

class A 
{ 
public: 
    class Inner {}; 
    A() 
    { 
     inner = new Inner(); 
    } 
    operator Inner*() { return inner; } 
private: 
    Inner* inner; 
}; 

int main() 
{ 
    A* a = new A(); 
    delete *a; 
    delete a; 
} 

Tuttavia, non è nuova caratteristica del C++ 11, in C++ 03 ci sono quasi stesse parole normali

L'operando deve avere un tipo di puntatore , o un tipo di classe con un singolo funzione di conversione (12.3.2) a un tipo di puntatore.

+0

Ahh, questo ha senso. Grazie. –

+0

Suppongo che sia destinato ad essere utilizzato con i wrappers di puntatore. – riv

+2

Yikes .......... –

Problemi correlati