我有一个类,其中移动分配被显式删除,因为该对象不应该是可移动的。但是如果我使用 RVO 分配给这个类的一个实例,编译器会给我错误:
main.cpp:12:16: note: candidate function has been explicitly deleted
编译器也提到了现有的复制赋值运算符,但没有使用它。
这是我的代码(或此处的(未)运行示例):
class foo {
public:
foo() {}
foo(foo const& r) {}
foo(foo&&) = delete;
foo const& operator=(foo const& r) { return *this; }
foo const& operator=(foo&& r) = delete;
};
int main(int argc, char **argv) {
foo bar;
bar = foo();
return 0;
}
我在这里找到了一个非常相似的帖子。
我知道我可以通过使用临时来避免这种情况。我想知道为什么每个编译器(我用 gcc、clang 和 vs2013 测试过)都不能直接调用现有的复制分配?有什么我想念的吗?