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)
而现在我想知道如何正确释放内存:
delete[] data;
for ( int i = 0; i < size; ++i ) {
data_[i].~T ();
}
表达式delete[] data必须与在堆上创建数组的new T[]匹配,因此T是*data的类型。否则程序的行为是未定义的(5.3.5)。
在您的示例中,数据和*data的类型未知。如果T不是char,则行为未定义。
即使在循环中调用析构函数之后,也不应该调用delete[] data 。最好调用delete[]reinterpret_cast<char*>(data)以避免未定义的行为。释放内存之前必须调用类型T的析构函数。