"delete this"를 써도 되나요?

조회수 4748회

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; }
}

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

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

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

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

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

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

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)