c++赋值操作符=不调用rhs上的析构函数

C++ assignment operator= without calling destructor on rhs

本文关键字:析构函数 rhs 调用 赋值操作符 c++      更新时间:2023-10-16

我想用指针赋值对象,而不调用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::unique_ptr<>,可能会有所帮助。