0

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

析构函数有问题吗?

我很感激帮助。

4

1 回答 1

0

就在这里。您不需要手动调用它(至少在这种情况下不会) - 显式调用析构函数仅在某些极端情况下完成。

你只需要delete[]内部的析构函数就可以了——当然假设someArray是用new[].

myArray对象在自动存储中,将在作用域结束时自动删除(并调用其析构函数)。

于 2013-09-15T18:32:26.257 回答