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
[559] 초간단 스마트포인트 클래스.
김태선 [jsdkts] 7662 읽음    2006-01-02 12:02
공부하는 과정에서 만들어 봤던 것인데.
그냥, 아주 간단히 사용하려고 할때 혹 쓸모가  있을수도.. -..-;
서정국님 의견이 반영된 수정버전입니다.

//---------------------------------------------------------------------------
// 초간단 스마트포인트

template<class T>
class smart_ptr
{
private:
    T  *ptr;
public:
    smart_ptr(T * p) : ptr(p) { }
    ~smart_ptr() { delete ptr; }
    T * operator->() { return ptr; }
    T & operator*()    { return *ptr; }
    operator T*() { return ptr; }
};

//---------------------------------------------------------------------------
// 테스트

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    smart_ptr<TStringList> list(new TStringList);
    list->Add("하하");
    list->Add("호호");
    list->Add("흐흐");
    list->Add("히히");
    Memo1->Lines = list;
}

추가.
스마트 포인트는 단순히 포인트를 해제해 주어야하는 귀챠니즘 때문에 쓰는 것만은 아닙니다.
스마트 포인트의 장점은 예외나 예러상황에서도 상당부분 안전하게 객체를 소멸시켜 준다는데 있습니다.
서정국.새더 [mmouse]   2006-01-03 17:20 X
추가로 오퍼레이터 하나만 추가 하면 대입연산자도 사용 가능 합니다.
operator T*() { return ptr; } 이런식으루요 ^^
김태선 [jsdkts]   2006-01-04 18:30 X
오~ 좋은 지적이군요.  ^^
이걸 보니, CString 처럼 AnsiString 도 LPCSTR 에 대해 바로 대입되게 오퍼레이터를 하나 추가했으면 좋았을걸 했던 기억이 나네요.

강재호.만해 [greenuri]   2006-01-05 10:36 X
그런데 저 함수가 끝나면 list 객체는 자동 소멸 되지 않나요?
김태선 [jsdkts]   2006-01-05 13:22 X
list 야 당연히 지역 변수닌까 함수가 끝나면 자동 소멸하죠.
자신이 소멸하면서 TStringList 객체도 소멸시킵니다.
new 를 써서 힙에 생성했기 때문에 스마트포인트가 아니고 그냥 포인트로 받았다면, delete 로 소멸시켜 주지 않으면 메모리 주인 잃고 떠 버리게 되죠.

+ -

관련 글 리스트
559 초간단 스마트포인트 클래스. 김태선 7662 2006/01/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.