【问题标题】:C++ assignment operator= without calling destructor on rhsC++ 赋值运算符 = 没有在 rhs 上调用析构函数
【发布时间】:2014-04-18 00:24:01
【问题描述】:

我想用指针分配一个对象,而不调用 rhs 对象的析构函数。 或者可能是另一种解决方案 这样可以提醒人们 free 没有被调用。 我不想复制指针中的所有内容 因为里面可以有很多。

有没有办法做到这一点 还是我只需要记住调用 free()?

class Stuff {
 public:
  Stuff(SomeObj *pointer) {
    this->pointer = pointer;
  }
  ~Stuff() {
    if(pointer) {
      cout << "forgott to free pointer" << endl;
      free();
    }
  }
  void free() {
    if(pointer) {
      delete pointer;
      pointer = NULL;
    }
  }
  Stuff& operator=(const Stuff &rhs) {
    if(pointer) {
      cout << "forgot to free before assigning" << endl;
      free();
    }
    return *this;
  }

 private:
  SomeObj *pointer;
}

Stuff getStuff() {
  Stuff stuff(new SomeObj(...));
  return stuff;
}

int main() {
  Stuff stuff = getStuff();
  stuff = getStuff(); // rhs destructor is run destroying pointer
  return 0;
}

【问题讨论】:

  • 查看 std::shared_ptr 或 boost::shared_ptr (更好:只使用其中之一)
  • 如果 c++11 然后使用移动语义。正如 DieterLücking 指出的那样,否则不会返回临时而是 smart_pointers。
  • 好的,谢谢。 shared_ptr 看起来应该可以工作,但是我会假设其他一些问题与 mingw32 有关系

标签: c++ assignment-operator


【解决方案1】:

看来您必须更改代码架构。

查看 std::unique_ptr,这可能有用且有帮助。

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2012-04-01
    • 2014-11-27
    • 2011-09-05
    • 2017-10-06
    • 2017-06-12
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    相关资源
    最近更新 更多