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
[517] AnsiString 0 으로 초기화 해도 되나?
김태선 [jsdkts] 7222 읽음    2005-11-24 13:42
심심풀이 팁입니다.

String 클래스는 4바이트 크기를 갖습니다.
클래스 내용중에

  private:
    // assert(offsetof(AnsiString, Data) == 0);
    char *Data;
  };

위와 같은 부분을 발견할 수 있는데, char *Data; 때문에 4바이트 크기를 갖는 클래스가 된 것입니다.
private 섹션에 있는 char *Data;

String.data() 나 String.c_str() 로 바로 참조할 수 있습니다.

4바이트 크기를 갖는 클래스라는 뜻은 내부에 가상함수가 없다는 것이죠.
그러므로

struct

  String  a;
  String  b;
  int       c;
} mm;
ZeroMemory(&mm, sizeof(mm));

식으로 초기화 해도 상관없다는 뜻입니다.
원래 String 객체를 선언하면 자동으로 String.Data 는 0 (NULL)로 초기화 됩니다.

ZeroMemory 초기화 가능한 시점은 최초의 시작단계에서만 그렇다는 뜻이고 일단 String 을 사용하기 시작한 뒤는
ZeroMemory 로 초기화 하는 것은 메모리 누수를 가져옵니다.
그러므로 재초기화가 필요할때는 초기화 리스트를 써야 합니다.
어느 경우이던지 초기화 리스트를 쓰는 것이 항상 안전하고 좋은 코드입니다.
단지 긴 타이핑이나 습관적으로 열거하는 것을 싫어하거나, 또는 이미 아는 사실을 가지고 길제 코딩하는 것이 싫으신 분들은 유용할 것입니다.

참고하세요... **;
김태선 [jsdkts]   2005-11-25 09:44 X
String  str = "abc"; str = NULL;
의 결과는 어떻게 될까요?
str 이 원래의 NULL 값으로 초기화 되기를 바라셨다면 예측이 빗나갔습니다.
str = "0" 으로 됩니다.

+ -

관련 글 리스트
517 AnsiString 0 으로 초기화 해도 되나? 김태선 7222 2005/11/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.