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

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

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.

关于c++ - 如何为具有自引用指针的类实现复制构造函数/赋值运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54621259/

10-09 03:53