Laut C++ 03 12.4/12, wenn ein destructorWas sagt C++ 03 12.4/12 über den Aufruf eines Basisklassen-Destruktors explizit über den Zeiger?
explizit aufgerufen wird, wenn das Objekt nicht den aus dem Klassentyp Destruktor abgeleiteten Klasse-Typs und nicht von einer Klasse destructor ist, hat das Programmverhalten nicht definiert
so habe ich diesen Code:
class Base {};
class Derived : public Base {};
char memory[100];
new(memory) Derived();
Base* ptr = (Base*)memory;
ptr->~Base();
Hier wird das Objekt vom Typ Derived
und "der Klassentyp des destructor" ist Base
und so ist es l Ooks wie nach der Standard-Formulierung gibt es keinen Grund für UB.
Also gibt der obige Code UB nach dem Standard?
hergeleitet abgeleitet in der Regel einige Mitglieder? – user1810087
@itwasntpete: Nun, nicht unbedingt. Sie könnten beispielsweise eine neue Ausnahmeklasse erstellen, die separat erfasst werden kann, ohne neue Mitglieder hinzuzufügen. – sharptooth
Ich habe eine Ahnung, dass dies UB ist, weil 12.4/12 die Form 'derivedPtr-> ~ Base()' mit der Absicht erlaubt, virtuelle Destruktoren zu unterstützen. C++ 03 ist hier jedoch nicht verfügbar. – MSalters