delete[] 是否等于每个元素删除。 C++

Is delete[] equal to per element delete. c++

各位!

假设我正在编写数组 class 并希望优化构造

data = reinterpret_cast<T*>(new char[sizeof (T) * size]);
    for ( int i = 0; i < size; ++i ) {
        new(&data[i]) T(some_value);
}

现在我想知道如何正确释放内存:

  1. delete[] data;

  2. for ( int i = 0; i < size; ++i ) { data_[i].~T (); }

您需要在 delete数据之前先调用析构函数。

// First step
for ( int i = 0; i < size; ++i ) {
    data_[i].~T();
}

// Second step
delete [] data;
// First, you must call the destructors, so that objects will be destroyed
for ( int i = 0; i < size; ++i ) {
    data_[i].~T ();
}

// Then, deallocate memory from the heap.
delete[] data;

表达式delete[] data必须匹配在堆上创建数组的new T[],这样T*data的类型。否则程序的行为是未定义的(5.3.5)。

在您的示例中,data*data 的类型未知。如果 T 不是 char,则行为未定义。

您应该调用delete[]数据,即使在循环中调用析构函数之后也是如此。最好调用 delete[] reinterpret_cast(data) 以避免未定义的行为。 T 类型的析构函数必须在释放内存之前调用。