복사 할당 연산자에서 참조/상수 참조 반환의 필요성
C의 복사 할당 연산자는 반환 유형에 대한 의문을 제기합니다. 새 객체의 복사본 대신 참조 또는 const 참조를 반환하는 이유는 무엇입니까? 이 개념을 명확히 하기 위해 다음 시나리오를 고려하십시오.
A a1(param); A a2 = a1; A a3; a3 = a2; // The problematic line
복사 할당 연산자가 다음과 같이 정의되었다고 가정합니다.
A A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }
복사 할당 연산자에서 참조를 반환하면 상당한 이점이 있습니다. 사본을 반환하는 것 이상. 참조를 반환하면 한 객체에서 다른 객체로 값만 복사하므로 최소한의 작업이 가능합니다.
그러나 값으로 반환하면 추가 오버헤드가 발생합니다. 할당 연산자가 호출될 때마다 생성자와 소멸자를 호출하므로 불필요한 리소스 소비가 발생합니다. 예를 들면 다음과 같습니다.
A& operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice. Efficient.
반대로:
A operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
따라서 복사 할당 연산자에서 참조 또는 const 참조를 반환하면 불필요한 객체 생성 및 소멸을 피하고 효율성을 높여 성능을 최적화합니다. 및 코드 유지 관리.
위 내용은 C 복사 할당 연산자가 복사본 대신 참조를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!