void* 에대한 질문입니다.

skylandi의 이미지


void main()
{
	void *p;
	int *a=new int;
	*a=20;
	p=(void *)a;
	delete p;
	cout << *a<<endl;
	*a=30;
	cout << *a<<endl;

}

1. 다음 소스를 실행결과 void *p가 가리키는 a의 동적 부분을 지우려고 했는데
이 것이 제대로 지워 졌는지 의문이 생깁니다.
실행 결과는 안지워 졋습니다.

2. void *p가 가리키는 int,char,float,struct,class등을 지울수가 있는지 궁금합니다.

pynoos의 이미지

delete 는 단지 메모리가 해제되는 것이 아니라,
pointer의 type에 따라 해당 소멸자가 먼저 불립니다.

소멸자가 불리고 난 뒤, 해당 type의 크기에 해당하는 메모리가 heap 상에서도 제거 되므로,
할당받은 pointer type과 다른 type으로 해제할 경우 (그것이 void*일지라도) 행동을 보장할 수 없습니다.