Размещение в готовой памяти в C++
Размещающий new строит объект по адресу, который уже передали, без обращения к глобальному аллокатору.
После такого создания память освобождают
явным вызовом деструктора, а не delete.
Запишем буфер, разместим в нем структуру
и выведем поле:
#include <iostream>
#include <new>
struct Label {
int id;
explicit Label(int v) : id(v) {}
};
int main() {
alignas(Label) unsigned char storage[sizeof(Label)];
Label* item = new (storage) Label(7);
std::cout << item->id << "\n";
item->~Label();
return 0;
}
В alignas(int) буфере размером
sizeof(int) разместите int
со значением 4, выведите его
и вызовите деструктор явно.