Perché il mio compilatore MSVC12 non è così?Il distruttore C++ chiama un operatore di cancellazione?
#include <new>
class thing
{
public:
thing() {}
~thing() {}
static void operator delete(void* ptr) = delete;
};
int main()
{
int g;
void* p = &g;
thing* t1 = new(p) thing();
t1->~thing();
return 0;
}
L'errore che ottengo è stranamente sulla coppia di main() di chiusura:
errore 2 Errore C2280: 'vuoto cosa :: operator delete (void *)': il tentativo di fare riferimento a una funzione eliminata
Se commento la chiamata al distruttore esplicito, l'errore scompare, il che implica che la chiamata distruttiva esplicita sta tentando di chiamare l'operatore delete (void *). Questo non ha senso intuitivo. Come puoi probabilmente vedere dal codice qui, ho già gestito la mia memoria, e non voglio che nessuno chiami l'eliminazione su cosa mai.
[compila e funziona] (http://coliru.stacked-crooked.com/a/b0c0ca91f45c3887) in gcc5, come dovrebbe. Cosa succede se si compila in modalità di rilascio? – vsoftco
[cpp.sh/3mqd](http://cpp.sh/3mqd) - gcc funziona bene –
Il build di rilascio ha lo stesso errore. Sembra che questo sia un bug del compilatore? – Kumputer