我问了一个关于移动构造函数的问题,我尚未接受答案,因为即使我开始掌握其他问题,我对问题的某些方面感到更加困惑.特别是,我发现了一个令人惊讶的案例,其中g ++和clang ++都生成了错误的移动构造函数.
delete函数.Qt库(版本5.4)是否这样做?请考虑以下代码:
class NoMove
{
public:
~NoMove() {}
};
int main()
{
std::cout << "NoMove move-constructible? " <<
std::is_move_constructible<NoMove>::value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
使用g++4.9.2和clang++3.5.1 编译,此代码打印:
NoMove move-constructible? 1
Run Code Online (Sandbox Code Playgroud)
...但是由于NoMove有一个明确定义的析构函数,我希望不应该自动生成移动构造函数和复制构造函数.请注意,意外的构造函数生成不是因为析构函数是微不足道的; 当析构函数delete[]是一个数组(!!)时,我得到了相同的行为,我甚至能够编译需要有效移动构造函数的代码(!!!!!).(见下面的例子.)这里发生了什么?在这里自动生成移动构造函数是否合法,如果是,为什么?
看来,提供安全的移动构造函数时delete涉及相当简单,但我只是想确保我的理解:当一个类包含一个指向成员,拥有基本数据,有没有任何在它是不正确和案例在将目标指针设置为旧值后,移动构造函数是否足以使RHS指针无效?
请考虑以下示例,该NoMove示例与上面的示例类似,并基于我原来的问题:
class DataType
{
public:
DataType()
{
val …Run Code Online (Sandbox Code Playgroud)