使用 std::shared_ptr 共享数据 class
Shared data class using std::shared_ptr
我需要一个实现共享数据语义的 class,std::shared_ptr
可能是一个不错的起点。我认为这种 class 的典型实现可以对共享数据使用私有 shared_ptr
,然后至少实现复制构造函数和 operator=
.
类似于:
class SharedDataClass {
public:
SharedDataClass(const SharedDataClass& other)
{
data_ = other.data_;
};
SharedDataClass& operator=(const SharedDataClass& other)
{
data_ = other.data_;
return *this;
}
private:
std::shared_ptr<DataType> data_;
};
请问有没有人对上述实现提出批评。是否还有其他 member/operator 应该实施以保持一致性?
在这种情况下不需要实现复制构造函数或赋值运算符。让编译器为您定义琐碎的默认值,shared_ptr 将完成您期望的工作。
我看到一个小陷阱。通常不应默认默认构造函数,因为它会创建一个空 data_
指针。我认为一般来说,更可取的是让默认构造函数创建一个 data_
指针,其中包含一个默认构造的 DataType
对象。
我需要一个实现共享数据语义的 class,std::shared_ptr
可能是一个不错的起点。我认为这种 class 的典型实现可以对共享数据使用私有 shared_ptr
,然后至少实现复制构造函数和 operator=
.
类似于:
class SharedDataClass {
public:
SharedDataClass(const SharedDataClass& other)
{
data_ = other.data_;
};
SharedDataClass& operator=(const SharedDataClass& other)
{
data_ = other.data_;
return *this;
}
private:
std::shared_ptr<DataType> data_;
};
请问有没有人对上述实现提出批评。是否还有其他 member/operator 应该实施以保持一致性?
在这种情况下不需要实现复制构造函数或赋值运算符。让编译器为您定义琐碎的默认值,shared_ptr 将完成您期望的工作。
我看到一个小陷阱。通常不应默认默认构造函数,因为它会创建一个空 data_
指针。我认为一般来说,更可取的是让默认构造函数创建一个 data_
指针,其中包含一个默认构造的 DataType
对象。