什么属于移动构造什么属于复制构造

我认为,属于移动构造的有

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;

 

这样的话也是一个移动构造,只有一个内存空间被开辟了

 

posted @ 2022-07-25 19:30  heisse  阅读(94)  评论(0编辑  收藏  举报