&을 컴파일하고 코드를 붙여 넣었습니다. 놀랍게도 오류없이 작동했습니다. (g ++/linux) 삭제 된 개체는 어떻게 여전히 일부 구성원을 사용할 수 있습니까? 정상적인 행동입니까?삭제 후 C++ 멤버를 사용할 수 있습니까?
#include <iostream>
using namespace std;
class chair {
public:
int height;
int x;
int y;
chair() {
before = last;
if(last!=NULL)
last->after = this;
else
first = this;
last = this;
after = NULL;
}
~chair() {
if(before != NULL)
before->after = after;
else
first = after;
if(after != NULL)
after->before = before;
else
last = before;
}
chair* before;
chair* after;
static chair* first;
static chair* last;
};
chair* chair::first;
chair* chair::last;
int main() {
chair *room = NULL;
int tempx = 0;
int tempy = 1;
while(tempx<=3) {
tempy = 1;
while(tempy<=3) {
room = new chair();
room->x = tempx;
room->y = tempy;
tempy++;
}
tempx++;
}
room = chair::first;
while(room!=NULL) {
cout << room->x << "," << room->y << endl;
delete room;
room = room->after;
}
}
그것은 당신이 그것을 또는 무료를 삭제하면 포인터를 제로 간단하게하는 것이 좋은 방법입니다. –
@M. Tibbits : 나는 항상 그 일을하는 습관에 동의한다. – GWW
어떤 좋은 메모리 관리자라도 디버그 빌드에서 고유 한 패턴 (예 : 0xdd)으로 해제 된 전체 메모리 블록을 memset하여 포인터 조회가 충돌 할 가능성이 높습니다. – EboMike