unique_ptr<T>
복사 구성을 허용하지 않고 대신 이동 의미를 지원합니다. 그러나 unique_ptr<T>
함수에서를 반환하고 반환 된 값을 변수에 할당 할 수 있습니다 .
#include <iostream>
#include <memory>
using namespace std;
unique_ptr<int> foo()
{
unique_ptr<int> p( new int(10) );
return p; // 1
//return move( p ); // 2
}
int main()
{
unique_ptr<int> p = foo();
cout << *p << endl;
return 0;
}
위의 코드는 의도 한대로 컴파일되고 작동합니다. 그렇다면 어떻게 그 줄 1
이 복사 생성자를 호출하지 않고 컴파일러 오류가 발생합니까? 2
대신 줄을 사용해야하는 경우 의미가 있습니다 (줄을 사용 2
하는 것도 좋지만 그렇게 할 필요는 없습니다).
C ++ 0x는 unique_ptr
반환 값이 함수가 종료되는 즉시 파괴되어 반환 포인터의 고유성을 보장하기 때문에 임시 객체 이므로이 예외를 허용 한다는 것을 알고 있습니다. 이것이 어떻게 구현되는지 궁금합니다. 컴파일러에서 특수한 경우입니까 아니면 언어 사양에 다른 악용 조항이 있습니까?
unique_ptr
. 전체 질문은 1과 2가 동일한 것을 달성하는 두 가지 다른 방법이라는 것입니다.
main
함수 종료 후 한 번 수행 되지만 종료시에는 수행 되지 않습니다 foo
.