使用 operator new 和 placement new 分配 vs 构造一个整数数组

Allocate vs construct an array of ints using operator new and placement new

你好,想了解更多 placement newoperator new、表达式 delete.. 以及将初始化与构造分开,我试过这个例子:

int main(){

    int* p = static_cast<int*>(operator new[](10 * sizeof(int)));
    p = new(p)int[10];

    for(int i = 0; i != 10; ++i)
        p[i] = i * 7;

    for(int i = 0; i != 10; ++i)
        std::cout << p[i] << ", ";
    operator delete[](p);

}

如您所述,没有 placement delete。使用placement new时,必须手动调用析构函数,eg:

void* mem = operator new[](10 * sizeof(T));
T* p = new(mem) T[10];
...
for(int i = 0; i < 10; ++i)
    p[i].~T();
operator delete[](mem);

其中 T 是所需的元素类型。

调用析构函数对于 POD 类型来说不是很重要,比如 int,但是对于非 POD 类型来说很重要,比如 std::string 等,以避免泄漏。