私は練習問題をやっていますが、メモリリークがないことを確認するためにデストラクタを作成するよう求められています。このデストラクタを使用すると、system("pause"); の実行後に次のエラーが発生します。
コピーコンストラクターは次のとおりです。
vector_of_int::vector_of_int ( const vector_of_int& a_vector )
{
an_array = new int[ a_vector.size ];
this->size = a_vector.size;
for( int i = 0; i < size; ++i )
{
an_array[i] = a_vector.an_array[i];
}
}
および代入演算子:
vector_of_int& vector_of_int::operator= ( const vector_of_int& a_vector )
{
if( this == &a_vector )
{
return *this;
}
this->size = a_vector.size;
for( int i = 0; i < size; ++i )
{
an_array[i] = NULL;
an_array[i] = a_vector.an_array[i];
}
return *this;
}
オンラインで少し検索したところ、コピー コンストラクターが同じメモリ位置を指していることが原因である可能性があることがわかりました。これをテストするために、私の main() 関数で、データを各ベクトル a、b、c にプッシュし、それらを再印刷しましたが、それらはすべて異なっていました。このエラーは、デストラクタが呼び出された後に表示され、次の行に進みます system("pause"); 任意のキーを押すと表示されます。main() の末尾は次のとおりです。
a_vector.~vector_of_int();
b_vector.~vector_of_int();
c_vector.~vector_of_int();
cout << "\n";
system("pause");
return 0;
main.exe は、main の中かっこの後にデストラクタを再度呼び出していますか? 3 つのデストラクタ ステートメントすべてにコメントを付けると、エラーは表示されなくなります。
ありがとう。