Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何编写复制赋值运算符来处理引用_C++_Vector - Fatal编程技术网

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这句话非常含糊-我的评论没有恶意,谢谢你的笑声:)。@chris
std::reference\u wrapper
看起来不错。关于实施它有什么建议吗?