C ++赋值运算符=不在rhs上调用析构函数

时间:2014-03-13 10:30:36

标签: c++ assignment-operator

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

有没有办法做到这一点 或者我只需记得打电话给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;
}

1 个答案:

答案 0 :(得分:0)

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

查看std :: unique_ptr&lt;&gt;,这可能会有所帮助。