C++ 如何编写复制赋值运算符来处理引用
我的作文如下:C++ 如何编写复制赋值运算符来处理引用,c++,vector,C++,Vector,我的作文如下: PropertyCollection { private: Dataset & dataset; public: PropertyCollection(Dataset & _dataset) : dataset(_dataset) {} 我需要一个向量属性。我需要能够调用properties.resize(10,PropertyCollection(dataset)) 不幸的是,向量需要一个默认构造函数PropertyCollection
PropertyCollection
{
private:
Dataset & dataset;
public:
PropertyCollection(Dataset & _dataset) : dataset(_dataset) {}
我需要一个向量属性
。我需要能够调用properties.resize(10,PropertyCollection(dataset))代码>
不幸的是,向量需要一个默认构造函数PropertyCollection::PropertyCollection()
来默认初始化其元素。换句话说,当它调整大小时必须调用PropertyCollection::PropertyCollection()
。因此,我认为,为了在调用resize
时对向量进行属性初始化,我需要实现一个默认构造函数和一个复制赋值操作符
PropertyCollection
{
private:
Dataset & dataset;
public:
PropertyCollection() = default;
PropertyCollection(Dataset & _dataset) : dataset(_dataset) {}
PropertyCollection & operator=(const PropertyCollection & other)
{
dataset = other.dataset
// error, cannot reassign a reference
不幸的是,我试图编写一个拷贝赋值操作符的尝试失败了。我们无法重新分配引用。那么,我该怎么做才能使向量工作呢
我的问题是,这是其他人一直在努力解决的问题吗?(事实上vector很难处理,因为它100%的时间都使用默认构造函数)我不会使用引用成员
如果您的PropertyCollection
实例“拥有”Dataset
,则将Dataset
设置为所属类的普通成员,并对其进行处理。您的类应该如下所示:
PropertyCollection
{
private:
Dataset dataset;
public:
// NOTE: single-argument ctors should be made explicit
// NOTE: and the formal parameter should be const ref
explicit PropertyCollection(const Dataset& _dataset) : dataset(_dataset) {}
// ...etc etc, other ctors, ...
};
如果一个数据集
实例在多个包含对象之间共享,则使用一个共享指针来表示共享所有权:std::shared_ptr
(如果使用符合C++11的编译器),或者其他。我提到这一点只是为了完整性,因为我怀疑您没有这个用例。引用不能重新分配,句号。使用指针。我不知道std::reference\u包装器是否真的是您想要的,但它确实存在。进一步来说,我的问题是,这是其他人一直在努力解决的问题吗?(事实上vector很难处理,因为它100%的时间都使用默认构造函数)。@chris这句话非常含糊-我的评论没有恶意,谢谢你的笑声:)。@chrisstd::reference\u wrapper
看起来不错。关于实施它有什么建议吗?