什么属于移动构造什么属于复制构造
我认为,属于移动构造的有
struct test{
int a = 0;
}
int main(){
test a{};
test a;
return 0;
}
Test t1(111);
Test t2 = std::move(t1);
Test t3 = Test(t2); // 显式调用拷贝构造函数使用t2生成临时对象,再调用移动构造函数构造t3
//关于t3,笔者经过实验,并不会调用移动构造,只会调用一个复制构造
使用赋值号的都属于复制构造,虽然右值会调用析构函数和移动构造的流程一样
但是它们有很明显的开辟了两块内存空间的操作,这是属于复制构造,也就是
深拷贝的典型操作。
Test t2 = Test(222);
先构造了一个临时对象,再使用该临时对象调用拷贝构造函数生成的t2,
最后将该临时对象释放。所以,为了提高代码执行效率,不要使用显示调用的方式创建新对象。
有例外:
int *a = new int;
这样的话也是一个移动构造,只有一个内存空间被开辟了