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

aob*_*aob 5 c++ memory-management delete-operator

大家!

让我们说我正在编写Array类并希望优化构造

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

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

  1. delete[] data;

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

CAF*_*CAF 2

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

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

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