清除具有删除了赋值运算符的成员的类实例

时间:2018-09-01 23:53:30

标签: c++

我想使用赋值运算符清除/重新实例化类的实例,但是该类中的某些成员将其赋值运算符删除了。因此,当我尝试将其分配给新实例时,它将保留其旧值。

这里有个例子:

#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;
}

是否有一些简单的解决方法,而无需编写清除所有成员的方法?为什么会这样?

1 个答案:

答案 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;
}