Согласно C++ 03 12,4/12, когда деструктор вызывается явноЧто говорит C++ 03 12.4/12 о вызове деструктора базового класса явно через указатель?
, если объект не относится к типу класса деструктора, а не из класса, производного от типа класса деструктора, программа имеет неопределенное поведение
так что у меня этот код:
class Base {};
class Derived : public Base {};
char memory[100];
new(memory) Derived();
Base* ptr = (Base*)memory;
ptr->~Base();
Здесь объект типа Derived
и «тип класса деструктор» является Base
и поэтому л ooks, как в соответствии со стандартной формулировкой, нет оснований для UB.
Значит, код выше дает UB в соответствии со стандартом?
do обычно обычно предоставляют некоторые члены? – user1810087
@itwasntpete: Ну, не обязательно. Например, вы можете создать новый класс исключений, который можно поймать отдельно, не добавляя новых членов. – sharptooth
У меня есть догадка, что это UB, потому что 12.4/12 допускает форму 'производныйPtr-> ~ Base()' с целью поддержки виртуальных деструкторов. Однако здесь нет C++ 03. – MSalters