我正在做一个练习题,问题要求创建一个析构函数以确保没有任何内存泄漏。当我使用此析构函数时,在执行 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 个析构函数语句时,错误不再显示。
谢谢。