>백엔드 개발 >C++ >C 11에서 `unique_ptr` 멤버가 있는 클래스에 대한 복사 생성자를 구현하는 방법은 무엇입니까?

C 11에서 `unique_ptr` 멤버가 있는 클래스에 대한 복사 생성자를 구현하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-03 10:54:17141검색

How to Implement Copy Constructors for Classes with `unique_ptr` Members in C  11?

unique_ptr 멤버가 있는 클래스에 대한 복사 생성자 구현

unique_ptr 멤버 변수를 활용하는 클래스로 작업할 때 복사 생성자를 구현하는 것이 중요합니다. 이 기사에서는 이러한 클래스에 대해 C 11에서 복사 생성자를 생성하는 기술을 살펴보겠습니다.

unique_ptr은 공유할 수 없으므로 해당 내용을 깊게 복사하거나 shared_ptr로 변환하는 것이 중요합니다. 다음 예는 깊은 복사를 보여줍니다.

class A
{
   std::unique_ptr<int> up_;

public:
   A(int i) : up_(new int(i)) {}
   A(const A&amp; a) : up_(new int(*a.up_)) {}
};

이 접근 방식에서는 새로운 고유_ptr이 할당되고 원래 포인터 내용의 복사본이 할당됩니다.

또는 이동 생성자를 대신 활용할 수 있습니다. 복사 생성자:

A(A&&amp; a) : up_(std::move(a.up_)) {}

그러나 이 방법은 소유권을 이전하므로 다른 의미를 도입합니다. 소스에서 대상 객체로의 고유_ptr.

완전성을 위해 전체 할당 연산자 집합은 다음과 같습니다.

A&amp; operator=(const A&a)
{
   up_.reset(new int(*a.up_));
   return *this;
}

A&amp; operator=(A&&amp; a)
{
   up_ = std::move(a.up_);
   return *this;
}

복사 생성자를 사용할지 이동 생성자를 사용할지 결정하는 것은 상황에 따라 다릅니다. 클래스를 std::Vector에서 사용하려는 경우 클래스를 이동 전용으로 만들 것인지 복사 가능하게 만들 것인지 선택하는 것은 벡터가 객체의 유일한 소유자여야 하는지 여부에 따라 영향을 받습니다.

위 내용은 C 11에서 `unique_ptr` 멤버가 있는 클래스에 대한 복사 생성자를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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