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[]それだけです-もちろん.someArraynew[]

myArrayオブジェクトは自動ストレージにあり、スコープの最後で自動的に削除されます (そしてそのデストラクタが呼び出されます) 。

于 2013-09-15T18:32:26.257 に答える