在我的Windows机器上,我没有收到任何警告/错误,但在我做的Linux机器上(我不记得它究竟是什么)。我只在程序结束时调用析构函数。
这是一个样本。
标题
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;
}
主
int main() {
CustomArray<int> myArray;
//initialize myArray
myArray.~CustomArray();
return 0;
}
析构函数有问题吗?
我很感激帮助。
答案 0 :(得分:0)
是的,有。你不要手动调用它(至少在这种情况下不是这样) - 显式调用析构函数只能在某些极端情况下完成。
你只需要在析构函数中使用delete[]
就可以了 - 当然假设someArray
分配了new[]
。
myArray
对象位于自动存储中,并将在范围的末尾自动删除(并调用其析构函数)。