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

C++빌더 Q&A
C++Builder Programming Q&A
[51102] Re:TTimer를 클래스에서 동적으로 생성할때..
장성호 [nasilso] 1820 읽음    2007-10-31 10:35
1.
m_pTimer = new TTimer(this);    이렇게 사용하려면?

  class CMyClass가  TComponent를 상속받아야 됩니다.

class CMyClass : public TComponent
{
...
};

그런데 위와같이 하려면 CMyClass도 new할때 owner를 받아야 되죠
관련하여 생성자를 만들어 줘야하구요


2.
m_pTimer = new TTimer(NULL);  ==> 이렇게 사용하면?

TComoponent *Owner로 TTimer는 생성자의 인자를 받습니다.

그럼 TComoponent *Owner의 역활은 무엇이냐?

이는 Component를 파괴와 관련됩니다.
생성할때 Owner를 주면 Owner가 delete( 또는 free) 될때
timer는 자동으로 delete됩니다.
그래서 생성할때 Owner를 주면 Owner가 delete될때 자동 delete되므로
명시적으로 delete해줄 필요가 없는것이죠

만약 timer의 Owner가 delete된후에 timer를 delete하려면 에러가 나게 됩니다.


결론적으로 m_pTimer = new TTimer(NULL);  이렇게 사용해도 문제 없습니다.

단 CMyClass 가 소멸될때 반드시 delete해줘야 하죠
CMyClass::~CMyClass()
{
     delete m_pTimer ;
}


그럼...





조상진 님이 쓰신 글 :
: 안녕하세요.. __);
:
: 제가 작성한 클래스가 있습니다. 이 클래스에 타이머를 설치하고 실행시키고 싶은데요..
:
: class CMyClass
: {
: TTimer * m_pTimer;
: }
:
: CMyClass::CMyClass()
: {
: m_pTimer = new TTimer(); <- 문제의 부분
: m_pTimer->OnTimer = OnTimerSend;
: m_pTimer->Interval = 1000;
: }
:
: 처음에 이렇게 하려니 생성이 되지를 않더군요. 그래서 헬프를 보니 TComponent * AOwner를 주어야 할듯 싶더군요.
:
: 그래서 new TTimer(this); 했더니.. 역시나 MyClass인지라 되지가 않더군요.
:
: 결국 그냥 NULL을 넣어서 생성을 했습니다만..
:
: 이렇게 사용해도 프로그램 동작에는 문제가 없는 것인지요? 빌더는 6 입니다.
:
: 아니면 AOwner를 지정하는 방법이 있는지요? 
:
: 별거 아닌것 같지만 초보인지라 어째 불안합니다.. __);
:
: 그럼 답변 부탁드립니다.

+ -

관련 글 리스트
51100 TTimer를 클래스에서 동적으로 생성할때.. 조상진 1640 2007/10/31
51102     Re:TTimer를 클래스에서 동적으로 생성할때.. 장성호 1820 2007/10/31
51103         답변 감사드립니다.. __); 조상진 1045 2007/10/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.