C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[665] 스스로 지워지는 클래스.
김태선 [cppbuilder] 7287 읽음    2007-06-29 13:20
VCL에 보면 TThread 라는 클래스가 있습니다.
이 클래스는
생성후 FreeOnTerminate = true;
해주면 이 클래스의 실행이 종료되는 시점에서 스스로 메모리에서 뿅~ 하고 사라집니다.
무슨 도사도 아닌데 스스로 없어지죠. 리소스와 메모리도 다 반환하고 ...
이런거 만드는 것은 생각보다 쉽습니다.
스스로 소멸되도록 delete this; 문을 종료해야할 시점에서 불러주면 그만입니다.

아래는 예제입니다.

//---------------------------------------------------------------------------

void __fastcall TForm1::Test()
{
    class T : public TObject
    {
        char *buf;
    public:
        __fastcall T()
        {
            buf = new char[10000000];
        }
        __fastcall ~T()
        {
            delete[] buf;
        }
        void    Resume()
        {
            // do something...
            ;

            // self delete code.
            delete this;
        }
    };
    T* temp = new T;
    temp->Resume();
}
//---------------------------------------------------------------------------

TThread 처럼 생성시켜 실행만 해주면
실행이 끝남과 동시에 메모리에서 사라집니다.

델파이의 경우도 방법은 같답니다.

너무 쉬운가요...
강재호.만해 [greenuri]   2007-07-02 11:54 X
흠흠~
이거랑 스마트 포인터랑 어떤 연관이 있는가요? ^^
김태선 [cppbuilder]   2007-07-02 13:19 X
아무 상관없습니다.
스마트 포인트는 해당 스코프를 벗어나면 객체가 지워지는데 반해,
TThread 나 위의 예와 같은 경우는 해당 기능이 끝나야 메모리에서 사라집니다.
즉 종료 시점을 임의로 정할 수 있는 것이죠.
또 해당 객체를 누가 관리해주지 않아도 된다는 장점이 있습니다.

김태선 [cppbuilder]   2007-07-06 09:23 X
모든 클래스는 그 목적과 사용방법을 정확하게 숙지해야
이상없이 쓸수 있습니다. VCL의 잘 만들어진 클래스도 얼마든지 잘못 사용할수 있습니다.

스스로 지워지는 delete this가 들어간 클래스는 위처럼 쓰면 아무런 문제가 없지만
스택에 생성하는 지역변수로도 가능하게 디자인 한 경우는, 지역변수가 해당 스코프를 벗어날때 자동으로 소멸자가 불려지므로 이미 delete this 한 경우라면 엑세스바이올린 에러가 납니다.

스스로 지워지는 클래스는 플젝하다보면 필요한 경우가 있고 그러한 경우 만들어 쓰면 됩니다. 이런 것은 객체의 자동화 문제의 일부분이기도 한데, 현대 프로그래밍 추세는 자동화 할수 있는 것은 자동화 하자는 쪽입니다.
C#은 자동화가 너무 심해서 오히려 고급프로그래밍이 걸림돌이 되어 스펙을 수정한 경우이지만,
문제의 핵심은 다루는 플머가 정확하게 아느냐입니다.
김도완 [purplecofe2]   2007-07-09 16:54 X
쓰레드 스위칭 오버헤드는 문제가 없을련지요?

쓰레드 시행 중에만 스위칭 오버헤드 영향이 생기는 것인가요?
김태선 [cppbuilder]   2007-07-10 09:30 X
쓰레드 스위칭은 말그대로 쓰레드의 실행을
CPU가 스위칭해주는 것인데,
본 주제와 별다른 관련이 없는 것 같습니다.
물론 쓰레드에 delete this; 를 적용한다고 해도 당근 오버헤드
문제와 직접적인 연관을 지을 수 있는 경우는 드물 것입니다..

+ -

관련 글 리스트
665 스스로 지워지는 클래스. 김태선 7287 2007/06/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.