【问题标题】:C++ - how to reinitialize object repeatedly?C++ - 如何反复重新初始化对象?
【发布时间】:2016-02-09 01:58:18
【问题描述】:

我正在尝试在 C++ 中实现这个逻辑:

Object obj(args);
while (obj.isOK()) {
    obj = obj.next();
}

但我不能使用这个确切的代码,因为Object 继承了boost::noncopyable,所以它没有赋值运算符。我可以将方法和构造函数添加到Object,(但不能使其可复制),但我不希望这样做。其他问题有手动销毁和放置 new 作为解决方案,如果我为 Object 创建一个新的构造函数,我可以这样做,但同样,最好我不需要新的构造函数,这似乎是一个非常讨厌的解决方案。我有什么选择?

【问题讨论】:

  • 你能给出“对象”的代码吗?我的意思是定义
  • 如果 Object 是可复制和可破坏的,你可能可以 memcpy 它。
  • @JamesRoot 我们应该假设该类已被设为不可复制是有原因的。
  • @drew 如果它真的像Object obj(args); 那样被构造,那不是意味着用户定义的构造函数,因此不是 POD?
  • 是的,我已经删除了该评论。我认为 POD 包含的类型比它实际包含的类型更多。我的错。

标签: c++ initialization noncopyable


【解决方案1】:

使Object::nextObject 修改到位。由于Object 不可复制,这似乎是Object::next 唯一明智的做法。

【讨论】:

    【解决方案2】:

    Object::next 返回什么? 如果它返回一个新的Object,您可以将移动赋值运算符添加到Object

    Object& operator=(Object&& obj)
    {
        //move its iternal state to this and then
        return *this;
    }
    

    因此不会发生数据复制,实际上也没有复制任何内容。

    【讨论】:

      猜你喜欢
      • 2015-12-03
      • 1970-01-01
      • 2013-07-23
      • 2012-01-17
      • 2023-03-17
      • 2020-10-13
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多