Domanda

Naturalmente, avviso deve essere trattata, ma perché è VC ++ C4150 (soppressione del puntatore al tipo incompleto) solo un avvertimento?

È stato utile?

Soluzione

A causa di serie dice che è legale, anche se pericoloso: 5.3.5

  

Se l'oggetto viene eliminato ha   tipo di classe incompleta al punto di   la cancellazione e la classe completa ha un   non banale distruttore o un   funzione deallocazione, il comportamento è   non definito.

Altri suggerimenti

Si ottiene questo avvertimento come risultato della dichiarazione anticipata. Così compilatore ha riconosciuto che si tratta di struttura / classe, ma non è sicuro di invocazione del distruttore.

Il senso di avvertimento più possibile si occupa di secondo passaggio del codice di analizzare da msvc. Quando quest'ultima classe è risolto compilatore può prendere una decisione, se esiste distruttore.

E 'legale in C ++, anche se abbastanza spesso una cattiva idea.

Approssimativamente, allarme per il livello 1 sono dei "potreste essere sorpresi, ma ho ignorato quello che hai detto c'è" tipo, e un paio di dichiarazioni selezionati in cui il codice generato è molto probabile che non corretta e crash-prona.

Quindi WL 2 è appropriato, dal momento che è legale e in molti scenari del tutto OK per eliminare un tipo incompleto.

Naturalmente, questo ragionamento è solo un'ipotesi. Forse Microsoft rotolato i dadi per assigne questo livello di avviso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top