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
[37691] Re:Re:왜 이런 현상이...ㅡㅡ??
황경록 [mpbox] 1044 읽음    2004-10-20 12:17
클래스 자체가 꼭 new 로 생성을 해야만 메모리가 할당되는 것은 아닙니다.

class TMyClass
{
    Method1()
    ...
}

으로 만드신 베이스 클래스라면 일반 스트럭처와 동일하게 사용할 수 있습니다.
스트럭처와 클래스는 분명 큰 차이점이 있지만 그 기반은 동일하니까요.

TMyClass MyClass;

MyClass.Method1() 의 형식으로 호출이 가능하며 메모리 누수와는 관계가 없습니다.
그리고 MyClass 는 컴파일 시에 TMyClass 만큼의 메모리가 할당되며 프로그램 종료시에
해제됩니다.

보통 빌더에서 new 를 사용해서 객체를 생성하는 것은 델파이에서 온 VCL Class 때문입니다.
VCL 클래스는 반드시 new 를 통한 메모리 할당을 통해서 이용해야 합니다.
VCL 의 구조적 특성( ^^ 예전에 읽었는데 영문이라 대충 읽어서 ... ) 때문입니다.

만약 클래스를 VCL 클래스 기반으로 만든다면 VCL 베이스 클래스인 TObject 를
상속받으시면 됩니다.

class TMyClass : public TObject
{
    Method1()
    ...
}

TMyClass* pMyClass = new TMyClass();
pMyClass->Method1();

이 되는 것이죠....

친구들 님이 쓰신 글 :
: 답변 감사합니다...위 답변을 보고 코드를 수정을 했습니다....
:
: 근데...제가 의문시되는것은 new로 생성을 하지 않은 코드가 돈다는 겁니다...
: 아래 코드는 project option의 autocreate form도 아닙니다...
: 즉, new 해주는 부분이 없습니다..그냥 function call하는것처럼 쓰고 있습니다..
: 물론 객체를 생성하면 Method called on invalid object라는 코드가드에서 뿌리던 메시지는 사라집니다..
:
: 지금까지 객체생성없이 잘 사용했기때문에 만약 문제가 있다면...
: 모든 소스를 바꾸어야 하는 문제가 생기기 때문에 저한테는 매우 중요한 문제입니다..
:
: 아무쪼록 이런 경험이 있으시면 reply감사하겠습니다...
:
: 그럼...
:
:
:
:
:
:
: 이상해 님이 쓰신 글 :
: : 코드 가드를 이용했더니 다음과 같은 에러를 뱉어냅니다...
: :
: : Error 00164. 0x100C00 (Thread 0x0CA0):
: : Method called on invalid object: Attempt to access 4 byte(s) at 0x00000000.
: : Call Tree:
: :    0x00414B8A(=AAAA.exe:0x01:013B8A) C:\test\EScnro.cpp#77
: :        ===> 에러가 EScnro에서 발생해서 AScnro까지 던져주고 있습니다...
: :    0x0043E67D(=AAAA.exe:0x01:03D67D) C:\test\DScnro.cpp#289
: :    0x004497E0(=AAAA.exe:0x01:0487E0) C:\test\CScnro.cpp#132
: :    0x0044A9E7(=AAAA.exe:0x01:0499E7) C:\test\BScnro.cpp#293
: :    0x0044A30E(=AAAA.exe:0x01:04930E) C:\test\AScnro.cpp#229
: :    0x400EE4E7(=vcl60.bpl:0x01:03D4E7)
: : ------------------------------------------
: : 위와 같은 에러를 수백개 뱉어내네요....메모리도 콸콸 세고.......-_-;;
: : 문제는 invalid object라는 에러인데.... EScnro.cpp는 객체를 생성을 하지않고 쓰고 있습니다
: : 여기서 제가 의문이 드는것은 객체 생성을 하지 않고 다음과 같이 사용했을때
: : 런타임시에 객체가 없다고 에러를 뱉어야 하는데 어떻게 빌더가 에러없이 도는지 이해가 가지 않습니다...
: :
: : ============header 파일====================
: :
: : #ifndef EScnroH
: : #define EScnroH
: :
: : //---------------------------------------------------------------------------
: : class TEScnro
: : {
: : private:    // User declarations
: : public:        // User declarations
: :     __fastcall TEScnro();
: :     AnsiString __fastcall ShowMessage(AnsiString msg);
: : };
: : //---------------------------------------------------------------------------
: : extern PACKAGE TEScnro *EScnro;
: : //---------------------------------------------------------------------------
: :
: : #endif
: :
: :
: : ============cpp 파일====================
: : #include "EScnro.h"
: :
: : //---------------------------------------------------------------------------
: : #pragma package(smart_init)
: :
: : TEScnro *EScnro;
: :
: : __fastcall TEScnro::TEScnro()
: : {
: : }
: :
: : AnsiString __fastcall TEScnro::ShowMsg(AnsiString msg)
: : {
: :     return "객체생성없이 왜 도냐?"; 
: : }
: :
: : ============================================================================
: :
: : 만약 일반 c처럼 생각해서 객체 없이 함수만 호출한다고 한다면...
: :
: : TEScnro *EScnro; ==>   TEScnro EScnro; 이렇게 포인터 없이 사용해야하는거 아닌가요??(struct 사용할때처럼...)
: : 그리고 EScnro->ShowMessage(msg); 이렇게 사용하는게 아니라
: : EScnro.ShowMessage(msg);로 사용하는거 아닌가요??
: :
: : 위와 같이 코딩하면 왜 수행이 되는지 알려주시면 감사하겠습니다...
: : 또한 메모리 누수 현상과도 관계가 있는지요??
: :
: : 조그만 도움이라도 부탁합니다...ㅜㅜ

+ -

관련 글 리스트
37683 왜 이런 현상이...ㅡㅡ?? 이상해 1114 2004/10/20
37688     Re:왜 이런 현상이...ㅡㅡ?? 친구들 1029 2004/10/20
37691         Re:Re:왜 이런 현상이...ㅡㅡ?? 황경록 1044 2004/10/20
37693             Re:Re:Re:왜 이런 현상이...ㅡㅡ?? 친구들 953 2004/10/20
37697                 Re:Re:Re:Re:인스턴스 생성 없이 호출한 멤버 함수 만복대.산수유 2341 2004/10/20
37698                     Re:Re:Re:Re:Re:왜 이런 현상이...ㅡㅡ?? 친구들 915 2004/10/20
37709                         Re:Re:Re:Re:Re:Re:왜 이런 현상이...ㅡㅡ?? 황경록 1053 2004/10/21
37711                             Re:Re:Re:Re:Re:Re:Re:왜 이런 현상이...ㅡㅡ?? 만복대.산수유 1261 2004/10/21
37685     Re:왜 이런 현상이...ㅡㅡ?? 남병철.레조 887 2004/10/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.