> 백엔드 개발 > C++ > `unique_ptr` 멤버를 포함하는 C 11 클래스를 올바르게 복사하는 방법은 무엇입니까?

`unique_ptr` 멤버를 포함하는 C 11 클래스를 올바르게 복사하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-03 00:30:10
원래의
915명이 탐색했습니다.

How to Properly Copy C  11 Classes Containing `unique_ptr` Members?

C 11에서 고유 포인터가 있는 클래스 복사

독점 소유권을 적용하는 스마트 포인터인 Unique_ptr이 포함된 클래스에 대한 복사 생성자 만들기 , 독특한 도전 과제를 제시합니다. C 11에서 Unique_ptr 멤버를 관리하려면 신중한 고려가 필요합니다.

해결책:

복사 생성자를 구현하려면 다음 두 가지 옵션이 있습니다.

  1. 딥 카피: Unique_ptr 콘텐츠의 새 복사본을 만듭니다. 이렇게 하면 두 객체 모두 데이터를 독립적으로 소유할 수 있습니다.
class A {
  std::unique_ptr<int> up_;
public:
  A(int i) : up_(new int(i)) {}
  A(const A& a) : up_(new int(*a.up_)) {}
};
로그인 후 복사
  1. shared_ptr로 변환: Unique_ptr을 shared_ptr로 변환하여 여러 소유자를 허용합니다.
std::shared_ptr<int> sp = std::make_shared<int>(*up_);
로그인 후 복사

추가 고려 사항:

  • 이동 생성자: 복사 생성자 대신 고유_ptr의 소유권을 이전하는 이동 생성자를 사용할 수 있습니다.
A(A&& a) : up_(std::move(a.up_)) {}
로그인 후 복사
  • 다른 연산자 오버로드: 전체 작업 세트의 경우 할당 연산자를 오버로드하는 것이 도움이 됩니다.
A& operator=(const A& a) { up_.reset(new int(*a.up_)); return *this; }
A& operator=(A&& a) { up_ = std::move(a.up_); return *this; }
로그인 후 복사
  • 벡터 고려 사항: 표준에서 클래스를 사용하려는 경우: :벡터, 벡터가 객체를 독점적으로 소유할지 결정합니다. 복사 생성자와 복사 할당 연산자를 생략하여 이동 전용 동작을 적용할 수 있습니다.

위 내용은 `unique_ptr` 멤버를 포함하는 C 11 클래스를 올바르게 복사하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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