【问题标题】:is default enough for a c'tor d'tor of a class with vector elements only?对于仅具有矢量元素的类的 c'tor d'tor,默认值是否足够?
【发布时间】:2020-11-24 12:45:40
【问题描述】:

我有一个名为 Item 的类,它有两个向量作为私有元素

class Item
{
  private:
     std::vector<std::string> V;
     std::vector<std::string> E;
  public:
     Item(std::vector<std::string> V,std::vector<std::string> E): V(V),E(E){}
     Item(const Item& Item)=default;
     ~Item()=default;
      Item& operator=(const Item& Item)=default;

};

如你所见,我使用了 d'tor 的默认值,复制 c'tor 和 operator =, 但这是否足够,或者我应该为每个人编写正文?

【问题讨论】:

  • 不,默认的会完成这项工作,请参阅rule of zero。事实上,您不需要编写任何代码 - 编译器会综合您需要的内容。

标签: c++ vector constructor destructor copy-constructor


【解决方案1】:

你不需要自己写,但我会修改你的构造函数的声明。

Item(const std::vector<std::string>& v, const std::vector<std::string>& e):V(v), E(e){}

总是喜欢通过 const 引用传递大对象,而不是按值传递。按值传递对象可能会导致不必要的对象副本。

【讨论】:

  • 我的错,无法更改。我不应该提到最后的评论。
  • 所以我不必添加const ?
  • 你最好,我正在回答其他发表评论但随后删除的人。
  • 我的第一个答案有错误的评论,有人指出了。我编辑了目前感谢他的答案,他删除了他的评论。
  • 如果你省略了 const,这意味着通过引用传递对象,任何创建 Item 实例的人都必须知道传递给它的向量的值在实例化后可能会发生变化。也许他们会在创建实例之前复制它们,直到他们看到 Item 的构造函数的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多