나는 클래스와 메모리 해제에 미치는 영향의 소멸자 함수의 동작을 분석하기 위해 쓴, 그러나 결과는 나에게 조금 놀라운 것 같다 :기본 소멸자 V.S. 단순히 정의 소멸자
class test {
public:
test() {}
~test() {} //<-----Run the program once with and once without this line.
};
int main()
{
test x;
test *a(&x);
cout << "a before memory allocation: " << a << endl;
a = new test;
cout << "a after memory allocation and before delete: " << a << endl;
delete a;
cout << "a after delete: " << a << endl;
return 0;
}
기본 소멸자와 함께 결과는 다음과 같습니다. 내 자신의 소멸자가 있습니다 : 두 번째 결과가 잘못 되었습니까?
할당 해제 기능이 잘못 할당이 해제 된 저장의 일부를 참조하는 모든 포인터를 렌더링 포인터, 에 의해 참조되는 스토리지를 할당 해제한다 어딘가에 내가 읽어 보시기 때문입니다.
어쩌면 나는 그것을 정확하게 따르지 않을 것입니다 (특히 어려운 영어 단어가 사용 되었기 때문에!). 이 일이 왜 일어 났는지 설명해 주시겠습니까? 정확히 정의 된 소멸자와 C++ 기본 소멸자의 차이점은 무엇입니까? 미리 도움을 주셔서 감사합니다. a
가 객체에 (null이 아닌) 포인터 인 경우
포인터가 동일하게 유지된다는 사실은 저장소가 할당 해제된다는 사실과 상충되지 않습니다. 이것은 재사용 될 수있는 메모리이며 방금 삭제 한 포인터를 사용하여이 메모리에 액세스하는 것은 자신의 잘못입니다. – Gerriet
@Gerriet 예를 들어 주시겠습니까? 고맙습니다. –
기본 소멸자로 포인터 수정을 재현 할 수 없습니다. http://ideone.com/vg3TYD – UnholySheep