delete this는 소멸자에 해선 안되고 또한 매우 안좋은 코딩 스타일이다.
사용하고자 하면 몇가지 주의 사항이 있다.
- new로만 인스턴스화가 되있어야 한다 (new[] X), 다른 포인터를 가리킨다던가, 레퍼런스를 가리켜서는 안된다.
- 맨 마지막 구문이여야 한다.
- 멤버 변수 변경 또는 함수 호출해선 안된다.
- this 오브젝트를 해제 후 건드려선 안된다, 역참조, -> 참조, 비교 등.
class A
{
public:
void fun()
{
delete this;
}
};
int main()
{
/* 실행 가능 */
A *ptr = new A;
ptr->fun();
ptr = NULL;
/* 에러 : Undefined Behavior */
A a;
a.fun();
getchar();
return 0;
}
delete 후
#include<iostream>
using namespace std;
class A
{
int x;
public:
A() { x = 0;}
void fun() {
delete this;
/* 에러 : Undefined Behavior */
cout<<x; // 동작함
}
};
int main()
{
A* obj = new A;
obj->fun();
return 0;
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 클래스 배열 포인터 및 2차원 배열 포인터 (0) | 2022.09.01 |
---|---|
C++ 간단하게 사용할 수 있는 포인터 해제 매크로 함수 (0) | 2022.08.29 |
C++ 정적 바인딩과 동적 바인딩의 차이점 (0) | 2022.08.21 |
C++ 중괄호 초기화 (0) | 2022.08.19 |
C++ 비동기 (Asynchronous) 실행 (0) | 2022.08.17 |