Warum mag mein MSVC12-Compiler das nicht?C++ Destruktor ruft einen Löschoperator auf?
#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;
}
Der Fehler, den ich bekommen ist seltsam auf der schließenden Klammer der main():
Fehler 2 Fehler C2280: 'Leere Sache :: operator delete (void *)': Der Versuch, eine gelöschte Funktion zu verweisen
Wenn ich den expliziten Destruktoraufruf auskommentiert, verschwindet der Fehler, was impliziert, dass der explizite Destruktoraufruf versucht, den Operator delete (void *) aufzurufen. Dies macht keinen intuitiven Sinn. Wie Sie aus dem Code hier sehen können, habe ich bereits meinen eigenen Speicher verwaltet, und ich möchte nicht, dass irgendjemand jemals etwas löschen möchte.
Es [kompiliert und arbeitet] (http://coliru.stacked-crooked.com/a/b0c0ca91f45c3887) in gcc5, wie es sollte. Was passiert, wenn Sie im Freigabemodus kompilieren? – vsoftco
[cpp.sh/3mqd](http://cpp.sh/3mqd) - gcc funktioniert gut –
Release-Build hat den gleichen Fehler. Scheint das ein Compiler Bug? – Kumputer