Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Toán tử Placement New trong C++


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...