Move constructors 和 Move assignment constructors简介

1. 概述

本文将重点介绍"Move"语义相关的移动构造和移动赋值构造函数,同时也给出了与"Copy"语义的拷贝构造和拷贝赋值构造函数的对比。

2. 拷贝构造和拷贝赋值构造函数

在了解移动构造和移动赋值构造函数之前,我们先来看一下拷贝构造和拷贝赋值构造函数。

  1. 拷贝构造函数:通过拷贝的方式,用一个相同类的对象去初始化类对象;
  2. 拷贝赋值构造函数:通过拷贝的方式,用一个类对象赋值给一个相同类且已经存在的类对象。

如果代码中没有显式地给出拷贝构造和拷贝赋值构造函数,并且又会用到时,此时编译器将会生成一套默认的拷贝构造和拷贝赋值构造函数(“浅拷贝”版本)。如果类中又有处理动态分配内存时,我们应该重写自己的“深拷贝”版本。
回忆一下我们之前的文章《Move语义和Smart Pointers先导(以一个例子说明)》中第五章的方案二,当时说采用拷贝构造和拷贝赋值构造函数有代价,我们在这里看一下有什么代价。

#include <iostream>

template<typename T>
struct AutoPtr3
{
    AutoPtr3(T* ptr = nullptr)
        : ptr(ptr)
    {
    }

    ~AutoPtr3()
    {
        if(this->ptr != nullptr)
        {
            delete this->ptr;
            this->ptr = nullptr;
        }
    }

    AutoPtr3(const AutoPtr3& ptr3) // deep copy
    {
        this->ptr 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值