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
[62190] Re:AnsiString 과 char
장성호 [nasilso] 1607 읽음    2010-08-18 16:11
FAQ의 초보자를 위한가이드3에서
   String부분을 한번 살펴 보십시요
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_faq&no=135
---------------------------------------------------------------------
간단히 설명하면
char는 1Byte짜리 변수고..
AnsiString은 class입니다.

AnsiString 은 void *Data라는 멤버 변수 딱 하나 가지고 있는데..
실제로 이놈 (void *Data)이   문자열Address를 가지고 있습니다. (char * 이죠)

Data라는 변수가 private로 되어있기때문에..
c_str()이라는 메소드를 통해  char*를 return받습니다.

AnsiString s="12345";

위와같이 코딩하면..
Heap에  "12345"를 저장할 메모리를 할당한후에
그 주소를 AnsiString.Data에 넣어둡니다.

그리고 매우 중요한것은
AnsiString클래스는 Copy On Write 패턴으로 디자인된 class입니다.

String s1="1234";
String s2=s1;

위와같이 하면 s1의 내용이 s2로 복사가 되는것이 아니라..
s1.Data의 주소가  s2.Data에 복사합니다.
그리고 RefCount가 하나 증가되구요..

어느한쪽에서라도 수정을 하게되면..
RefCount가 하나 줄어들고..
수정하는쪽은 메모리 새로 할당해 원본을 copy한후에.. 수정합니다.
그러면 s1.Data에 들어있는 Address랑 s2.Data에 들어있는 Address가 다른 값이 되죠

그리고 AnsiString은
문자열 조합 s1+s2등을 할수 있도록 만든클래스이며..
기타 여러가지 기능이 있습니다.

그럼..


하이~ 님이 쓰신 글 :
: AnsiString 과 char에 차이가 뭔가요?
: 그리고 c_str()은 무엇인지 알려주세요 관련이 있다고 하던데...

+ -

관련 글 리스트
62186 AnsiString 과 char 하이~ 1129 2010/08/18
62190     Re:AnsiString 과 char 장성호 1607 2010/08/18
62192         Re:Re:AnsiString 과 char 하이~ 1327 2010/08/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.