如何为具有自引用指针的 class 实现复制构造函数/赋值运算符?
How to implement a copy constructor / assignment operator for a class that has a self-referential pointer?
我不太确定是否可以实现复制 constructor/assignment 运算符,所以如果我希望这个 class 等于另一个包实例,它会用那个替换自己实例.
我已经尝试过通用赋值运算符实现(检查自引用等)。
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 是 class 苹果的基础(衍生)。我希望能够有袋子包含自己和苹果。
没有必要用
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.
我不太确定是否可以实现复制 constructor/assignment 运算符,所以如果我希望这个 class 等于另一个包实例,它会用那个替换自己实例.
我已经尝试过通用赋值运算符实现(检查自引用等)。
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 是 class 苹果的基础(衍生)。我希望能够有袋子包含自己和苹果。
没有必要用
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.