> 백엔드 개발 > C++ > C에서 고유 포인터를 함수 또는 생성자 인수로 전달하려면 어떻게 해야 합니까?

C에서 고유 포인터를 함수 또는 생성자 인수로 전달하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-30 22:34:10
원래의
325명이 탐색했습니다.

How Should I Pass Unique Pointers as Function or Constructor Arguments in C  ?

생성자와 함수의 매개변수로 고유 포인터 관리

고유 포인터(unique_ptr)는 C 11의 고유 소유권 원칙을 따릅니다. 함수 또는 생성자 인수로 고유한 포인터를 사용하면 여러 옵션이 고유하게 발생합니다.

값 전달:

Base(std::unique_ptr<Base> n)
  : next(std::move(n)) {}
로그인 후 복사

이 방법은 고유 포인터의 소유권을 함수/객체로 이전합니다. 포인터의 내용은 함수로 이동하고 작업 후 원래 포인터는 비워 둡니다.

비상수 L-값 참조 전달:

Base(std::unique_ptr<Base> &n)
  : next(std::move(n)) {}
로그인 후 복사

허용 고유 포인터에 액세스하고 잠재적으로 소유권을 주장하는 함수입니다. 그러나 이 동작은 보장되지 않으며 포인터 처리를 결정하려면 함수 구현을 검사해야 합니다.

Const L-값 참조 전달:

Base(std::unique_ptr<Base> const &n);
로그인 후 복사

함수가 고유 포인터의 소유권을 주장하는 것을 방지합니다. 포인터에 액세스할 수는 있지만 저장하거나 수정할 수는 없습니다.

R-값 참조 전달:

Base(std::unique_ptr<Base> &&n)
  : next(std::move(n)) {}
로그인 후 복사

비 const L-값 참조 전달과 비교 가능 하지만 임시 인수가 아닌 인수를 전달할 때는 std::move를 사용해야 합니다. 함수가 소유권을 주장할 수도 있고 주장하지 않을 수도 있어 예측하기가 어렵습니다.

권장 사항:

  • 값으로 전달: 고유 포인터의 소유권을 주장할 것으로 예상되는 함수.
  • Const를 통과 L-값 참조: 함수가 포인터에 일시적으로 액세스해야 하는 경우.
  • 대체 접근 방식 고려: 소유권에 대한 불확실성이 발생하므로 R-값 참조를 전달하지 마십시오.

고유한 조작 포인터:

고유 포인터를 이동하려면 std::move를 사용하세요. 고유 포인터 복사는 허용되지 않습니다:

std::unique_ptr<Base> newPtr(std::move(oldPtr));
로그인 후 복사

위 내용은 C에서 고유 포인터를 함수 또는 생성자 인수로 전달하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿