适合我自己定制的Arraylist(C ++)的析构函数

时间:2013-09-15 18:29:21

标签: c++ arrays templates destructor

在我的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;
 }

析构函数有问题吗?

我很感激帮助。

1 个答案:

答案 0 :(得分:0)

是的,有。你不要手动调用它(至少在这种情况下不是这样) - 显式调用析构函数只能在某些极端情况下完成。

你只需要在析构函数中使用delete[]就可以了 - 当然假设someArray分配了new[]

myArray对象位于自动存储中,并将在范围的末尾自动删除(并调用其析构函数)。