我想使用赋值运算符清除/重新实例化类的实例,但是该类中的某些成员将其赋值运算符删除了。因此,当我尝试将其分配给新实例时,它将保留其旧值。
这里有个例子:
#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;
}
是否有一些简单的解决方法,而无需编写清除所有成员的方法?为什么会这样?
答案 0 :(得分:1)
为什么会这样?
您当前对if(array_is_empty($request->has('name'))) {
//do something
}else {
//do another thing
}
的实现是富巴。
operator=()
但是,在执行任何操作之前,还应该测试自我分配,因为复制成员可能会非常昂贵:
B& operator=(B const &other)
{
x = other.x;
return *this;
}