最近突然想一个事情,如果只是控制了赋值预算和拷贝构造,在这种情况下移动构造是否还能默认生成呢?
写了个例子:
#include <iostream>
class NonCopy
{
public:
explicit NonCopy () {}
virtual ~NonCopy () {}
private:
NonCopy& operator=(const NonCopy&);
NonCopy(const NonCopy&);
};
int main(int argc, char *argv[])
{
NonCopy a, b;
// a = b;
// NonCopy c = b;
//a = std::move(b);
//NonCopy c = std::move(b);
return 0;
}
证明实际上封禁了全部的拷贝操作。也就是没有生成默认的移动构造。当然手动添加一个移动构造是OK的。private构造的方式在c++11之后也被delete声明取代了。
#include <iostream>
class NonCopy
{
public:
explicit NonCopy () {}
virtual ~NonCopy () {}
NonCopy& operator=(NonCopy&&) {
return *this;
}
NonCopy(NonCopy&&) {
}
NonCopy& operator=(const NonCopy&) = delete;
NonCopy(const NonCopy&) = delete;
};
int main(int argc, char *argv[])
{
NonCopy a, b;
// a = b;
// NonCopy c = b;
a = std::move(b);
NonCopy c = std::move(b);
return 0;
}
PREVIOUSc++的线程传参
NEXTdoxygen生成项目调用关系