고유 포인터를 함수 매개변수로 사용
고유 포인터는 C 11에서 메모리 관리 기능을 제공합니다. Unique_ptr을 함수 인수로 전달하면 고려해야 할 여러 접근 방식은 각각 뚜렷한 의미를 갖습니다.
가치 전달 (소유권 이전)
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
이 생성자를 호출하려면 포인터를 값으로 전달해야 하며 소유권을 함수로 효과적으로 이전해야 합니다.
Base newBase(std::move(nextBase));
이 작업 후에 nextBase는 Unique_ptr의 소유권이 이전되었으므로 비어 있습니다.
비상수로 전달 L-값 참조(소유권 모호성)
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
이 접근 방식에는 실제 L-값(명명된 변수)이 인수로 필요합니다.
Base newBase(nextBase);
이 경우에는 함수가 포인터의 소유권을 주장할지 여부는 확실하지 않습니다. Base::Base(std::unique_ptr
Const L-값 참조 전달(소유권 이전 없음)
Base(std::unique_ptr<Base> const &n);
const L 값 참조를 전달하면 함수가 포인터 소유권을 주장하는 것을 방지할 수 있습니다. 함수는 가리키는 객체에 접근할 수 있지만 그 값을 수정할 수는 없습니다.
R-값 참조 전달(잠재적 소유권 이전)
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
이 접근 방식은 다음과 유사합니다. const가 아닌 L 값 참조를 전달합니다. 임시 개체 전달을 허용합니다:
Base newBase(std::unique_ptr<Base>(new Base)); // Legal
그러나 임시가 아닌 인수를 전달할 때는 std::move를 사용해야 합니다. 함수는 포인터의 소유권을 주장할 수도 있고 주장하지 않을 수도 있으며, 구현을 검토하지 않으면 함수의 동작이 덜 명확해집니다.
권장사항
고유 포인터 조작
고유 포인터를 조작하려면:
위 내용은 C에서 고유 포인터를 함수 매개변수로 어떻게 전달해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!