클래스에서 고유 포인터 복사
고유 포인터가 포함된 클래스를 멤버로 복사하려면 특별한 고려가 필요합니다. 고유 포인터는 공유될 수 없으므로 해당 내용의 전체 복사 또는 공유 포인터로의 변환이 필요합니다.
깊은 복사
깊은 복사 접근 방식은 새로운 고유 포인터를 만들고 원래 포인터 내용의 복사본으로 초기화합니다.
class A { std::unique_ptr<int> up_; public: A(int i) : up_(new int(i)) {} A(const A& a) : up_(new int(*a.up_)) {} };
여기서 A의 복사 생성자는 deep은 원래 고유 포인터가 가리키는 int를 복사합니다.
공유 포인터로 변환
또는 고유 포인터를 공유 포인터로 변환할 수 있습니다. 여러 개체 간에 공유됩니다.
class B { std::unique_ptr<int> up_; public: B(int i) : up_(new int(i)) {} B(const B& b) { up_ = std::make_shared(*b.up_); } };
이 예에서 B의 복사 생성자는 고유 포인터를 공유 포인터로 변환합니다. 포인터를 사용하면 B의 여러 복사본이 동일한 기본 데이터에 액세스할 수 있습니다.
기타 연산자
std::Vector와 같은 컨테이너와 원활하게 작동하려면 일반적으로 추가 연산자가 필요합니다. 필수:
이동 생성자:
B(B&& b) { up_ = std::move(b.up_); }
과제 복사:
B& operator=(const B& b) { up_ = std::make_shared(*b.up_); return *this; }
이동 할당:
B& operator=(B&& b) { up_ = std::move(b.up_); return *this; }
이러한 연산자는 객체가 다양한 컨텍스트에서 안전하게 할당되고 복사될 수 있도록 보장합니다.
위 내용은 클래스를 복사할 때 고유 포인터를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!