std::unique_ptr 멤버가 있는 사용자 정의 삭제자
C에서 std::unique_ptr 클래스는 포인터 소유권을 관리하는 편리한 방법을 제공합니다. 기반 객체. 그러나 사용자 정의된 삭제 프로세스가 필요한 타사 개체로 작업하는 경우 std::unique_ptr을 클래스 멤버로 사용할 때 문제에 직면할 수 있습니다.
다음 시나리오를 고려해보세요. std::unique_ptr
독립 실행형 함수에서 이러한 시나리오와 함께 std::unique_ptr을 활용하려면 사용자 정의 삭제기를 사용할 수 있습니다:
void foo() { std::unique_ptr<Bar, void (*)(Bar*)> bar(create(), [](Bar* b) { destroy(b); }); ... }
그러나 std::unique_ptr이 a의 멤버일 때 이를 어떻게 달성할 수 있습니까? class?
클래스 멤버의 사용자 정의 삭제자
create 및 destroy가 다음 시그니처가 있는 자유 함수라고 가정합니다.
Bar* create(); void destroy(Bar*);
정의할 수 있습니다. Foo 클래스는 다음과 같습니다.
class Foo { std::unique_ptr<Bar, void (*)(Bar*)> ptr_; // ... public: Foo() : ptr_(create(), destroy) { /* ... */ } // ... };
이 구현에서는 destroy를 직접 제공합니다. std::unique_ptr에 대한 삭제자 역할을 합니다. 무료 기능을 삭제자로 사용하면 람다 또는 사용자 정의 삭제자 클래스가 필요하지 않습니다.
위 내용은 C 클래스의 std::unique_ptr 멤버와 함께 사용자 정의 삭제자를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!