Warum wird "delete * this" jemals kompiliert?

8

Ich erlasse eine Klasse von MFC CDialogEx :

%Vor%

Ich habe PostNcDestroy als solches implementiert :

%Vor%

Ich war überrascht zu sehen, dass dieser Code kompiliert (unter Verwendung von VC120 oder Visual Studio 2013) und generiert überhaupt keine Warnung. Kann jemand sagen, warum das der Fall ist?

Danke.

    
Benoit 18.04.2016, 11:25
quelle

2 Antworten

8

Es ist eine implizite Konvertierung; Die Klasse CWnd hat eine operator HWND() Konvertierungsfunktion und HWND ist ein Zeigertyp.

Das Löschen von HWND ist ein Fehler, aber der Compiler weiß das nicht und kann Sie nicht warnen.

    
molbdnilo 18.04.2016, 11:32
quelle
4
  

Warum wird "delete * this" jemals kompiliert?

Es ist möglich, ein einfaches mcve zu schreiben, das das Verhalten wiedergibt, nach dem Sie fragen:

%Vor%

Dies wird kompiliert, weil foo implizit in einen Zeigertyp umgewandelt werden kann. Dasselbe könnte für Ihre Klasse der Fall sein.

    
user2079303 18.04.2016 11:32
quelle

Tags und Links