C++移动语义的引入目的

主要和深浅拷贝有关

当类对象中包含指针,指针会通过new的方式从堆中申请的空间,在销毁时需要释放对应的内存空间

在调用拷贝构造函数时,对于该指针的拷贝,需要通过深拷贝,即在堆中申请内存的方式来构造一个全新的类对象,避免两个对象的指针指向同一块儿内存区域(浅拷贝)

如果被拷贝的对象即将被释放,或者说是临时对象,我们就可以优化一下这个流程,将新对象的指针指向该临时对象的堆空间,并将该临时对象的指针置空,即一种挪用的思想,又回归了浅拷贝

移动语义就诞生了,也就是浅拷贝

移动语义指的就是将其他对象(通常是临时对象)拥有的内存资源移为已用

class demo{
public:
    demo():num(new int(0)){
        cout<<"构造函数"<<endl;
    }

    demo(const demo &d):num(new int(*d.num)){
        cout<<"深拷贝构造函数"<<endl;
    }
    //添加移动构造函数
    demo(demo &&d):num(d.num){
        d.num = NULL;
        cout<<"移动构造函数"<<endl;
    }
    ~demo(){
        cout<<"析构对象"<<endl;
    }
private:
    int *num;
};
demo get_demo(){
    return demo();//函数栈空间构造临时对象并申请堆空间内存,返回的对象还需要进行一次深拷贝
}
int main(){
    demo a = get_demo();//再调用一次深拷贝,将返回的对象拷贝给a
    return 0;
}

原文链接: https://www.cnblogs.com/lxzbky/p/17064320.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++移动语义的引入目的

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/399865

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月14日 上午9:36
下一篇 2023年4月14日 上午9:37

相关推荐