전자는 Str을 새로 생성해서 그 안에 데이터를 넣는 것이구요.
후자는 Str의 원래 있는 주소만 가져오는거죠.
후자가 속도는 눈꼽만큼 빠를 수 있겠으나...
함수 내부에서 Str을 변경하면 인자로 썼던 값 자체가 변하기 때문에
그다지 좋은 코딩이라고 할 수 없는거 같습니다.
AnsiString data = "ABCDEF";
Print(data);
ShowMessage(data); // 결과 CHANGE
...
void TForm1::Print(AnsiString& Str)
{
Str = "CHANGE";
}
게다가 AnsiString은 내부적으로 레퍼런스 카운트를 제공하기 때문에
새로 생성한다고 해서 메모리 낭비가 심하거나 하지 않습니다.
좋은 코딩이라고 함은 개발 과정에 모호함을 없애야 하는데,
(그래야 논리 버그가 줄기 때문이예요)
때문에 표준 라이브러리 같은 곳에서는 const를 많이 쓰는거죠.
내부에서 변화는 없다라는 것을 명확히 하기 위함입니다.
갑자기궁금 님이 쓰신 글 :
: 다음과 같은 함수를 만들때,
: void TForm1::Print(AnsiString Str)
: {
: Memo1->Lines->Add(Str);
: }
: 와
: void TForm1::Print(AnsiString& Str)
: {
: Memo1->Lines->Add(Str);
: }
: 가 다른점은 복사연산자를 쓴건데요...
:
: 보통 후자쪽을 많이 쓰는거 같은데 특별한 이유가 있나요?
: 전자와 같이 썼을때 문제 발생 소지가 있는건지...궁금합니다...
|