문제

이전 질문,그것은 등장하는 일반 돌아 의 가치 기능을 항상 해당 복사본 return 인자로 변수를 할당한다.

가 이 표준에서 요구하거나 수 있는 기능을 최적화에 의해 건설'할당하는 변수라도 내에서 기능 body?

struct C { int i; double d; };

C f( int i, int d ) {
    return C(i,d); // construct _and_ copy-construct?
}

int main() {
    C c = f( 1, 2 ); 
}
도움이 되었습니까?

해결책

표준은 모든 수준의 사본 누락을 허용합니다.

  • 로컬 임시를 구성하고, 복사 값으로 사본을 구성하고, 반환 값을 로컬 "C"로 복사하여 구성하십시오. 또는
  • 로컬 임시를 구성하고이를 "C"로 복사하십시오. 또는
  • "i, d"인수와 함께 "c"를 구성하십시오.

다른 팁

표준다는 말을 복사본을 생성자를 필요로는 사용되지 않을 볼 섹션 12.8/15:

15 할 때마다 임시 개체 클래스 은 복사를 사용하여 복사본을 생성자 과 이 물체와 복사하는 동 cv-자격이 없는 형식 구현하는 것은 허용된 치료 원본과 복사본으로 두 개의 의 다른 방법을 참조하여 동일한 개체를 수행하지 않은 복사 모든 경우에도 클래스 복사 생성자 또는 소멸 측면 효과.

그리고 훨씬 더 많은 비슷한 맥락에서.

참조별로 매개 변수를 전달하지 않고 결과를 할당하지 않습니까?

이러한 고려 사항을 완전히 피하는 매우 간단하고 좋은 방법이 있습니다. 부스트 :: shared_ptr을 생성 된 객체로 반환하는 것을 고려할 수 있습니다. 사용 가능성과 관련하여 실제로 동일하지만 객체를 불필요하게 복사하지는 않습니다. 몇 계층의 함수 호출을 통해 반환하면 사실이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top