"delete this"를 써도 되나요?


new로 생성한 클래스의 인스턴스를 마지막에 지울 때, delete this;같이 써도 되나요?

이렇게 쓰거나

소스코드1

void doStuff()
{
    // this 객체는 working module이고
    // 다른 모듈로 바꾸고 싶을 때

    controller->setWorkingModule(new OtherModule());

    // 이제 Other module이 연산을 하고
    // this를 정리함
    delete this;
}

아니면 otherClass에서 this를 대신 죽이게 만들어도 되나요?

소스코드2

void doStuff()
{
    otherClass.deleteMe(this); // void deleteMe(void *obj) { delete obj; }
}
  • 2016년 01월 25일에 작성됨

조회수 299


1 답변


좋아요
0
싫어요
채택취소하기

delete this;같이 쓰는 것을 suicide(자살)이라고 합니다 객체의 suicide는 주의해서 써야 하는데, The C++ FAQ Lite의 내용을 간단하게 요약하면,

1. 객체가 new로 할당되었어야 함(new[]도 안됨)

2. suicide하는 함수가 객체가 마지막으로 호출하는 함수 여야 함

3. 다른 멤버함수가 this 객체를 건드려서는 안됨

4. this 포인터를 delete한 후, this 포인터를 써서는 안됨

을 100% 확신하는 경우에만 써야 합니다.

  • 2016년 01월 25일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close