不使用赋值操作符的值替换
Value replacement without using the assignment operator
考虑这个最小的例子:
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "Making A" << endl; }
A& operator=(const A& other) = delete;
};
int
main(int argc, char* argv[])
{
A a;
a = A();
return 0;
}
编译会产生以下错误:
$ g++ -std=c++11 -Wall test.cc -o test && ./test
test.cc: In function ‘int main(int, char**)’:
test.cc:17:7: error: use of deleted function ‘A& A::operator=(const A&)’
a = A();
^
test.cc:9:8: error: declared here
A& operator=(const A& other) = delete;
^
我想将a
的值"重置"为新建的A
。是否有一种方法可以让我只使用构造函数来做到这一点?也就是说,不使用在我的真实世界的代码中需要删除的赋值操作符?例如,我尝试使用std::move
和a = std::move(A());
,但这给出了相同的错误。
只能调用一个对象的构造函数一次。在此之后,对象已经构造完成,不能再构造第二次。
你可以销毁对象并在适当的地方重建它:
a.~A();
::new (&a) A();
如果你发现自己需要经常这样做,最好只是提供一个.clear()
成员或类似的东西…或者不删除赋值操作符。你没有提供足够的细节。
相关文章:
- c++中的重载赋值操作符
- c++类继承和赋值操作符
- 带引用类成员的赋值操作符
- 复制构造函数,赋值操作符重载
- c++派生类赋值操作符
- 从映射中替换赋值的宏
- 通过调用Move赋值操作符实现Move构造函数
- 带有映射的赋值操作符
- 单参数构造函数和赋值操作符
- 如何从复制赋值操作符调用复制构造函数
- c++复制构造函数,重载赋值操作符,方法get()
- 用于具有const数据成员的类的move和右值赋值操作符
- 类赋值操作符和复制构造函数
- 赋值操作符重载
- 影响正确性的move构造函数/赋值操作符示例
- 当类是子类时重载赋值操作符
- 如果没有定义Move语义(Move构造函数和Move赋值操作符),编译器是否默认优化
- 在类赋值操作符函数中,为什么必须返回*this ?
- 模板类的重载赋值操作符
- 不使用赋值操作符的值替换