생성자와 함수에서 Unique_ptr 매개변수를 처리하는 방법
시나리오
클래스 고려 자신을 다음과 같이 참조하는 베이스 다음:
class Base { public: typedef unique_ptr<Base> UPtr; Base() {} Base(Base::UPtr n) : next(std::move(n)) {} virtual ~Base() {} void setNext(Base::UPtr n) { next = std::move(n); } protected: Base::UPtr next; };
unique_ptr 인수를 전달하는 방법
unique_ptr 매개변수를 효과적으로 사용하려면 다음 방법을 고려하세요.
1. 값별(A)
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
Base newBase(std::move(nextBase));로 호출되면 이 메서드는 포인터의 소유권을 함수로 이전합니다. 생성 후 nextBase는 비어 있게 됩니다.
2. 비상수 l-값 참조(B)
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
이를 위해서는 실제 l-값(명명된 변수)이 필요하며 함수가 잠재적으로 포인터의 소유권을 주장할 수 있습니다.
3. const l-value 참조(C)
Base(std::unique_ptr<Base> const &n);
이는 함수가 포인터를 저장하는 것을 방지하지만 실행 기간 동안 객체에 대한 액세스를 보장합니다.
4. r-값 참조(D)
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
(B)와 유사하지만 임시 인수가 아닌 인수를 전달할 때 std::move를 사용해야 합니다. 함수는 소유권을 주장할 수도 있고 주장하지 않을 수도 있습니다.
권장사항
조작 Unique_ptr
unique_ptr을 이동하려면 다음을 사용하세요. 표준::이동. 이렇게 하면 복사를 방지하고 올바른 소유권 이전이 보장됩니다.
위 내용은 C 생성자와 함수에서 `unique_ptr` 매개변수를 어떻게 전달해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!