Отсюда код ниже.
class A
{
int x;
public:
A() {x = 3;}
};
int main()
{
void* mem = operator new(sizeof(A));
A* obj = static_cast<A*>(new(mem)(A));
std::cout << obj->x << std::endl;
obj->A::~A();
std::cout << obj->x << std::endl;
}
Мой первый вопрос: почему я могу напрямую вызвать деструктор A; Мой второй вопрос: почему вывод:
3
3
Объект obj не удаляется после вызова деструктора? Вторые 3 меня смущают.
Ответ 1 · рейтинг 7 · Baum mit Augen
Почему я могу вызвать деструктор?
Потому что это общедоступная функция-член, и вы можете вызывать общедоступные функции-члены.
Почему объект не удаляется?
В вашем конкретном случае он все еще существует, потому что A имеет тривиальный деструктор.
Если бы он был нетривиальным, он был бы удален в том смысле, что вам больше не разрешено его использовать. Если вы все равно это сделаете, у вас будет неопределенное поведение.
Для более подробного обсуждения этого прочитайте это.