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
[71182] Re:메소드에서 선언된 지역변수 메모리 해제 관련질문...
pwrlove [pwrlove] 3153 읽음    2014-04-10 17:12

아래의 주신 질문이

어떤 특정한 객체내의 매쏘드를 말하시는 거라면,
먼저 그 매쏘드가 속한 객체의 수명과의 관계를 먼저 결정하셔야 할 듯 합니다

만약, 매쏘드내에서 사용하고자하는 컴포넌트 객체가 앞에서 말씀드린 객체와 같다면
그 객체의 멤버로 선언을 변경 하시면 될 듯 하고요,

그렇지 않고, 매쏘드내에서만 유효하다는 판단을 하시면 그 매쏘드내에서만 살아남도록 처리하면 될듯 합니다.
그런데, 그도 저도 잘 모르겠다면, 그냥 멤버 변수로 하셔도 될듯합니다(매우 힙을 심각히 많이 사용한다면 제외.)

변수 라이프싸이클 관리와 관련하여 한가지 요령은
이게 잘 판단되지 않으시면, 저의 경우는 그냥 멤버 변수로 포인터 선언하시고, 생성자에서 널로 초기화 하신다음.
호출되는 매쏘드에서 널이면 생성하여 사용하고, 아니면 객체를 해제하거나 경우에 따라서 초기화 매쏘드가 지원되면
재 사용하는 방법으로 하면 별 문제 없습니다. 물론 어디서든지 해제하고 반드시 포인터에 널만 채워 놓으면 됩니다.

물론 소멸자에서 객체가 살아있다면 해제하면 되죠.

그 외 글로벌 객체로 선언하는 것은 별로 권장하고 싶지 않습니다.
물론 편한 경우도 많지만, 일반적으로 사용하지 않도록 해야 합니다.

가장 하지 말아야 할것은 매쏘드내 지역 변수 포인터에 할당된 객체를 리턴하여 외부로 내 보내는 것입니다.
그렇게하면 객체의 소유관계가 불 분명하게 되고, 그 객체를 해제 하지 않을 가능성이 높아집니다.

그런 경우는 객체 위임 관계에 대한 내용 정리하시면 됩니다.
뭐, aggregation, composition 이런 내용 구글링하시면 됩니다.

그리고, 디자인 패턴 잘 공부해 두시면 도움이 됩니다.

아래의 내용 정리해 보세요.

1) 변수를 정의하면 메모리 구조에 어떻게 할당되는지 정리
    코드영역 > 데이터 영역 > 힙영역 > 스택영역

2)  1) 항목에 따른 변수의 수명 관계 정리.
    -> 예) 지역변수는 스택에 생성이 되고, 함수를 리턴하면 자동으로 없어진다.

너무 정신없게 설명했나?

참고 바랍니다.



만나바 님이 쓰신 글 :
: 메소드에서 new를 통해 컴포넌트 객체를 생성한다음에 메모리를 해제할려면
: 해당 메소드 안에서 메모리를 해제 해야되는걸로 알고 있는데 해당 메소드 안에서 객체의
: 메모리를 해제하면 메소드 호출시 해당 컴포넌트 객체가 바로 삭제되는거자나요.
: 지역변수처럼 선언된 객체를 해제 하려면 어떻게 해야할까요? ( 변수들을 다 전역변수로 선언해야할까요?)

+ -

관련 글 리스트
71154 메소드에서 선언된 지역변수 메모리 해제 관련질문... 만나바 4528 2014/04/04
71182     Re:메소드에서 선언된 지역변수 메모리 해제 관련질문... pwrlove 3153 2014/04/10
71183         Re:Re:메소드에서 선언된 지역변수 메모리 해제 관련질문... pwrlove 4310 2014/04/10
71157     Re:메소드에서 선언된 지역변수 메모리 해제 관련질문... 빌더초보 4800 2014/04/04
71184         Re:Re:메소드에서 선언된 지역변수 메모리 해제 관련질문... pwrlove 3328 2014/04/10
71217             Re:Re:Re:메소드에서 선언된 지역변수 메모리 해제 관련질문... pwrlove 3135 2014/04/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.