C++ 适用于我自己定制的Arraylist(C+;+;)的析构函数
在我的windows机器上,我没有收到任何警告/错误,但在Linux机器上我收到了(我不记得它到底是什么)。我只在程序结束时调用析构函数 这是一个样品 标题C++ 适用于我自己定制的Arraylist(C+;+;)的析构函数,c++,arrays,templates,destructor,C++,Arrays,Templates,Destructor,在我的windows机器上,我没有收到任何警告/错误,但在Linux机器上我收到了(我不记得它到底是什么)。我只在程序结束时调用析构函数 这是一个样品 标题 template<class T> class CustomArray { T *someArray; int numElements; CustomArray<T>(); ~CustomArray<T>(); } //destructor template<
template<class T>
class CustomArray {
T *someArray;
int numElements;
CustomArray<T>();
~CustomArray<T>();
}
//destructor
template<class T>
CustomArray<T>::~CustomArray() {
for(int k=0; k<numElements;k++)
someArray[i].~T();
delete [] someArray;
}
模板
类自定义数组{
T*someArray;
国际货币基金组织;
自定义数组();
~CustomArray();
}
//析构函数
模板
CustomArray::~CustomArray(){
对于(intk=0;k是的,有。您不需要手动调用它(至少在本例中不是这样)-只在某些情况下显式调用析构函数
您只需在析构函数中使用delete[]
,就可以了-当然,假设someArray
分配了new[]
myArray
对象处于自动存储中,将被删除(并调用其析构函数)自动地,在作用域的末尾。你已经把它倒过来了。编写析构函数的全部目的是不必做任何特殊的事情来释放内存。它会被自动调用。@john如果对象在自动存储中,构造函数将初始化它(应该提到)。那么你要说的是,删除[]someArray,是否会自行清除数组中用于类T的每个实例的内存?
int main() {
CustomArray<int> myArray;
//initialize myArray
myArray.~CustomArray();
return 0;
}