2017-11-23 1 views
-2

내가 가정에 고유 한 포인터에 대한 다음과 같은 질문과 소유권 이전 이있는PTR 독특하고 이동 의미가

class Base 
{ 
    Base() 
    { 
    } 
    void foo(unique_ptr<Base> p) 
    { 
    } 
}; 
void main() 
{ 
    Base b; 
    b.foo(std::unique_ptr<Base> p(new Base); 
} 

위의 코드 섹션은 시간적 고유의 포인터를 생성하고 난 컴파일 오류가 예상을 다음과 같습니다. 그러나 코드가 컴파일됩니다. 나는 유일하게 유효한 함수 프로토 타입은

void foo(unique_ptr<Base> && p) 

내가 그와 함수의 두 서명이 유효 놀라게 할 생각 것으로 예상. rvalue 참조를 전달할 때 void foo (unique_ptr p)가 유효한 이유를 설명해 주시겠습니까?

+1

일치하지 않는 괄호로 인해 코드가 컴파일되지 않습니다. –

답변

0

std::unique_ptr에는 rvalue 생성자가 있으므로 rvalue에서 생성 할 수 있습니다. 클래스 유형을 인수로 취하는 함수를 호출하면 호출에 제공된 매개 변수에서 클래스 유형을 구성 할 수있는 해당 클래스의 1 인수 비 명시 적 생성자가 이어야합니다.


1이 같은 함수를 호출하는 유일한 방법이 아니다; 명시 적 변환 연산자와 관련된 다른 방법이 있습니다

관련 문제