考虑这个最小的例子:
#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;
^
我想&#34;重置&#34; a
对新构建的A
的值。有没有办法让我只使用构造函数来做到这一点?也就是说,不使用需要在我的真实代码中删除的赋值运算符?例如,我尝试使用std::move
la a = std::move(A());
,但这会产生同样的错误。
答案 0 :(得分:4)
您只能调用一次对象的构造函数。之后,该对象已经构建,不能再次构建。
您可以销毁对象并在适当的位置重建它:
a.~A();
::new (&a) A();
如果您发现自己需要经常这样做,最好只提供一个.clear()
成员或类似的东西......或者可能只是不删除赋值运算符。你还没有提供足够的细节。