我想使用赋值运算符清除/重新安装类的实例,但该类中的某些成员已删除其赋值运算符。因此,当我尝试将其分配给新实例时,它会保留其旧值。
下面是一个例子:
#include <cstdio>
class C
{
C operator= (const C&) = delete;
};
class B
{
public:
int x = 0;
C c;
B& operator=(const B& other)
{
return B();
}
};
int main()
{
B b;
b.x = 5;
b = B();
printf("%i\n", b.x); // prints 5, should print 0
return 0;
}
如果没有编写清除其所有成员的方法,是否有一些简单的解决方法?为什么会这样?
为什么会这样?
您当前对operator=()
的实现是fubar。
B& operator=(B const &other)
{
x = other.x;
return *this;
}
但是,在执行任何操作之前,您还应该测试自我分配,因为复制成员可能非常昂贵:
B& operator=(B const &other)
{
if(this != &other)
x = other.x;
return *this;
}