문제

가정하자 나는 다음과 같은 코드:

class some_class{};

some_class some_function()
{
    return some_class();
}

이 작동하는 것 같다 꽤 잘하고 나를 저장 하는 데 문제 변수를 선언하게 반환 값.하지만 나는 생각하지 않는 본것이 어떤 종류에서의 튜토리얼을 참조.이 컴파일러 특유의 것(visual C++)?또는 이것이 뭔가 잘못입니까?

도움이 되었습니까?

해결책

없이 완벽하게 유효합니다.이것은 또한 더 효율적으로 컴파일러가 실제로 할 수 있는 최리 일시적입니다.

다른 팁

로 돌아서 객체를 함수 호출은"공장은"디자인 패턴,광범위하게 사용됩.

그러나,당신이 원하는 것을 조심부 개체를 반환 또는 포인터를 객체입니다.전자는 이러한 당신을 소개할 것이 복사본을 생성자/할당 운영자가 될 수 있습니다.

그것은 유효하지만,성능은 이상하지 않을 수 있습 방법에 따라가 호출됩니다.

예를 들어:

A a;
a = fn();

A a = fn();

은 동일하지 않습니다.

첫 번째 경우에는 기본 생성자를 호출한 다음에 할당 운영자를 호출에 필요한 일시적 변수를 구성됩니다.

두 번째 경우에는 복사본을 생성자를 사용합니다.

지능형 충분한 컴파일러는 것입니다 무엇을 최적화가 가능합니다.지만,경우에는 복사본을 생성자는 사용자가 제공한 다음이 보이지 않는 어떻게 컴파일러 최적화할 수 있습으로 임시 변수가 있습니다.그것에는 호출하는 복사본을 생성자,그리고 그렇게 그는 다른 인스턴스입니다.

의 차이를 강탈 워커의 예이라는 반환 값을 최적화(RVO)하려는 경우 google 습니다.

덧붙여하려는 경우,enure 귀하의 개체 면에서 반환된 가장 효율적인 방식으로 만들기에 객체를 힙(ie 을 통해 새로운)을 이용하여 shared_ptr 및 반환 shared_ptr 대신 합니다.포인터를 반환되고 참조를 제대로입니다.

는 완벽한 합리적인 C++.

이것은 완벽하게 법적인 C++및 모든 컴파일러를 받아야 합니다.당신은 무엇을 생각을 하고 있을 수 있다고 뭔가 잘못입니까?

그것을 할 수있는 가장 좋은 방법은 당신의 클래스에 매우 가볍고-나는 의미 없다는 매우 비싼 복사본을 만들의습니다.

하나의 부작용하는 방법은 비록 그것을 만드는 경향이있다 더 가능성이 있는 일시체를 만들었지만,그에 따라 달라질 수 있습 방법론 컴파일러 최적화할 수 있습 것들입니다.

더 헤비급하는 클래스를 확인하고 싶지 않은 복사하고(예를 들어 큰 비트맵 이미지)다음 그것은 좋은 생각을 전달하는 주변에 참조로 매개 변수는 다음으로 채워에서,단지를 절대적으로 확인이 되지 않는 일시적인 개체를 만들어집니다.

전반적으로 일어날 수 있는 구문을 간소화하고 상황이 더 많은 직접 수 있다의 부작용을 만드는 이상의 임시 물체를 식에서,그는 무언가를 염두에 두어야 할 때는 디자인에 대한 인터페이스 더 헤비급 개체입니다.

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