저는 C++ 라이브러리를 작성 중이며 클래스 중 하나를 암시 적으로 공유하려고합니다. 불행히도 나는 그 구현과 약간 혼란스러워진다. 나는 데이터를 저장하기 위해 std::shared_ptr
을 사용하고 싶습니다. 그리고 아래의 코드가 아무것도 없는지 궁금합니다. shared_ptr 멤버 및 복사 생성자
// MyClass.cc
class MyClass::Data
{
public:
Data (void) { ptr = NULL; }
~Data (void) { delete ptr; }
int* ptr;
};
MyClass::MyClass (void)
: mData (new MyClass::Data())
{
mData->ptr = new int(5);
}
// MyClass.h
class MyClass
{
public:
MyClass (void);
private:
class Data;
std::shared_ptr<Data> mData;
};
다른 사람의 코드를 보면 나는 그들이 및 빈 소멸자 (표준 : 이동 등을 사용하여) 복사/이동 생성자/연산자를 추가 나타났습니다. 의견 중 하나는 MyClass :: Data의 소멸자가 컴파일러에 의해 발견되도록 MyClass에 빈 소멸자가 필요하다는 것을 언급했습니다. 위의 코드가 실제로 필요한가 아니면 충분합니까? 기본 복사/이동 생성자/연산자와 소멸자가 충분합니까?
'mData' 포인팅 데이터를 공유하려는 경우 복사 생성자와 할당 연산자가 필요하지 않습니다. 기본 설정은 괜찮습니다. – 101010
시도해 보셨습니까? –
'MyClass :: Data :: ptr' 멤버에 대해'std :: unique_ptr' 또는'std :: shared_ptr'을 사용하지 않을까요? –