如何为具有自引用指针的类实现复制构造函数/赋值运算符

How to implement a copy constructor / assignment operator for a class that has a self-referential pointer?

本文关键字:实现 复制 构造函数 赋值运算符 指针 自引用      更新时间:2023-10-16

我不太确定是否可以实现复制构造函数/赋值运算符,因此如果我希望这个类等于另一个包实例,它会用该实例替换自己。

我已经尝试了通用赋值运算符实现(检查自引用等(。

template <typename T>
class bags {
public:
  bags(const bag<T>& b) {
  }
  bags<T>& operator=(bags<T> const &b) {
  }
  private:
  bags<T> * self;
}
template <typename T>
class apples : public bags<T> {
public:
  void test () {
    self = new bags<T>; // this will invoke assignment operator
  }
private:
  bags<T> * self;
}

袋子是苹果(派生(的基类。我希望能够让袋子装自己和苹果。

无需

使用

bags<T> * self;

总是提供语言this.如果出于某种原因必须使用 self,请使其成为成员函数。

bags<T> const* self() const
{
   return this;
}
bags<T>* self()
{
   return this;
}

另一种选择是使用函数局部变量。

bags<T> const* self = this;  // In const member functions.
bags<T>* self = this;        // In non-const member functions.