如何编写一个拷贝赋值操作符来处理引用
How can I write a copy assignment operator to handle references
我有如下的组合:
PropertyCollection
{
private:
Dataset & dataset;
public:
PropertyCollection(Dataset & _dataset) : dataset(_dataset) {}
我需要一个vector<PropertyCollection> properties
。我需要能够调用properties.resize(10, PropertyCollection(dataset));
不幸的是,vector需要一个默认构造函数PropertyCollection::PropertyCollection()
来默认初始化它的元素。换句话说,当它调用resize
时,它必须调用PropertyCollection::PropertyCollection()
。因此,我认为,为了在调用resize
时对vector进行属性初始化,需要实现默认构造函数和复制赋值操作符。
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, ...
};
如果Dataset
实例在多个包含对象之间共享,则使用共享指针来表示共享的所有权:如果使用符合c++ 11的编译器,则使用std::shared_ptr<T>
,否则使用Boost智能指针模板。我提到这个只是为了完整,因为我怀疑您没有这个用例。
相关文章:
- c++中的重载赋值操作符
- c++类继承和赋值操作符
- 带引用类成员的赋值操作符
- 复制构造函数,赋值操作符重载
- c++派生类赋值操作符
- 通过调用Move赋值操作符实现Move构造函数
- 带有映射的赋值操作符
- 单参数构造函数和赋值操作符
- 如何从复制赋值操作符调用复制构造函数
- c++复制构造函数,重载赋值操作符,方法get()
- 用于具有const数据成员的类的move和右值赋值操作符
- 类赋值操作符和复制构造函数
- 赋值操作符重载
- 影响正确性的move构造函数/赋值操作符示例
- 当类是子类时重载赋值操作符
- 如果没有定义Move语义(Move构造函数和Move赋值操作符),编译器是否默认优化
- 在类赋值操作符函数中,为什么必须返回*this ?
- 如何避免拷贝赋值操作符的双重自由或损坏(fasttop)
- VS 2015更新3删除拷贝赋值操作符错误
- 如何编写一个拷贝赋值操作符来处理引用