Явный вызов деструктора в C++
Явный вызов деструктора записывают
как указатель->~Тип() и нужен,
когда объект создан размещающим new
в собственной памяти.
Буфер уже содержит готовый объект - остается корректно уничтожить его перед повторным использованием байтов. Вызовем деструктор и выведем метку до и после очистки:
#include <iostream>
#include <new>
struct Tag {
int code;
explicit Tag(int c) : code(c) {}
~Tag() {
std::cout << "dtor\n";
}
};
int main() {
alignas(Tag) unsigned char block[sizeof(Tag)];
Tag* p = new (block) Tag(3);
std::cout << p->code << "\n";
p->~Tag();
return 0;
}
В готовом буфере уже лежит Tag.
Вызовите p->~Tag() для указателя
на него и убедитесь, что строка "dtor"
появилась в выводе.