>백엔드 개발 >C++ >C 생성자와 함수에서 `unique_ptr` 매개변수를 어떻게 전달해야 합니까?

C 생성자와 함수에서 `unique_ptr` 매개변수를 어떻게 전달해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-18 10:08:11212검색

How Should `unique_ptr` Parameters Be Passed in C   Constructors and Functions?

생성자와 함수에서 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를 사용해야 합니다. 함수는 소유권을 주장할 수도 있고 주장하지 않을 수도 있습니다.

권장사항

  • 함수에 소유권을 이전할 때 방법 (A)을 사용해야 합니다. .
  • (C) 방법을 권장합니다. 단순히 고유한_ptr을 해당 기간 동안 사용하는 함수입니다.
  • (D)방법은 소유권 이전에 대한 모호성으로 인해 피해야 합니다.

조작 Unique_ptr

unique_ptr을 이동하려면 다음을 사용하세요. 표준::이동. 이렇게 하면 복사를 방지하고 올바른 소유권 이전이 보장됩니다.

위 내용은 C 생성자와 함수에서 `unique_ptr` 매개변수를 어떻게 전달해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.