사본을 생성자를 대반환 값은 최적화
-
21-08-2019 - |
문제
에 이전 질문,그것은 등장하는 일반 돌아 의 가치 기능을 항상 해당 복사본 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을 생성 된 객체로 반환하는 것을 고려할 수 있습니다. 사용 가능성과 관련하여 실제로 동일하지만 객체를 불필요하게 복사하지는 않습니다. 몇 계층의 함수 호출을 통해 반환하면 사실이 될 것입니다.
제휴하지 않습니다 StackOverflow