Placement new** cho phép xây dựng (construct) đối tượng tại một địa chỉ bộ nhớ cụ thể đã được cấp phát trước đó, thay vì cấp phát mới trên heap.
Cú pháp: new (dia_chi) Kieu(tham_so).
Khác với new thường (cấp phát + khởi tạo), placement new chỉ khởi tạo. Để hủy, phải gọi destructor tường minh: ptr->~Kieu().
Ví dụ
#include <iostream>
using namespace std;
int main() {
int a = 5;
cout << "a = " << a << ", &a = " << &a << endl;
// Placement new: ghi đè object int tại địa chỉ &a
int *p = new (&a) int(10);
cout << "Sau placement new:\n";
cout << "a = " << a << endl; // 10
cout << "p = " << p << endl; // trùng &a
cout << "&a = " << &a << endl;
// Lưu ý: int không có destructor, nhưng với class phải gọi p->~Class()
return 0;
}
Kết quả
a = 5 &a = 0x7ffd... Sau placement new: a = 10 p = 0x7ffd... &a = 0x7ffd...