연습 문제가 발생하며 메모리 누수가 없는지 확인하기 위해 소멸자를 만들어야합니다. 나는이 소멸자를 사용하는 경우, 내가 ("일시 중지") 시스템을 실행 한 후,이 오류를 얻고있다 ;:클래스 소멸자 오류
는 복사 생성자입니다 :
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에 데이터를 푸시하고 다시 인쇄하여 모두 다르게 표시했습니다. 이 오류는 소멸자가 호출되고 다음 라인 시스템 ("일시 중지")으로 진행된 후 표시됩니다. 어떤 키를 누른 후에 나타납니다.
a_vector.~vector_of_int();
b_vector.~vector_of_int();
c_vector.~vector_of_int();
cout << "\n";
system("pause");
return 0;
주요의 중괄호 종료 후 다시 소멸자를 호출하는 메인 .exe입니다 : 여기) (주의 끝은? 3 개의 소멸자 문 모두에 주석을 달면 오류가 더 이상 표시되지 않습니다.
감사합니다.
관련 코드 및 3의 규칙을 따랐다는 사실 +1. hmjd가 솔루션을 지적했습니다. –
복사 생성자가 올바르게 보입니다. [copy-and-swap] (http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom)을 사용하여 대입 연산자를 구현하면 예외가 발생하지 않고 누수가 방지되고 쉽습니다. –