zoukankan      html  css  js  c++  java
  • 不可轻视复制构造函数

    如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”
    的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐
    含了错误。以类 String 的两个对象 a,b 为例,假设 a.m_data 的内容为“ hello”,
    b.m_data 的内容为“ world”。
    现将 a 赋给 b,缺省赋值函数的“位拷贝”意味着执行 b.m_data = a.m_data。
    这将造成三个错误:一是 b.m_data 原有的内存没被释放,造成内存泄露;二是
    b.m_data 和 a.m_data 指向同一块内存, a 或 b 任何一方变动都会影响另一方;三
    是在对象被析构时, m_data 被释放了两次。


    偷懒的办法处理拷贝构造函数与赋值函数

    如果我们实在不想编写拷贝构造函数和赋值函数,又不允许别人使用编译器生成的
    缺省函数,怎么办?
    偷懒的办法是:只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码。
    例如:
    class A
    {
    private:
    A(const A &a); // 私有的拷贝构造函数
    A & operate =(const A &a);// 私有的赋值函数
    };
    如果有人试图编写如下程序:
    A b(a); // 调用了私有的拷贝构造函数
    b = a; // 调用了私有的赋值函数
    编译器将指出错误,因为外界不可以操作 A 的私有函数。

  • 相关阅读:
    Ubuntu 下配置ftp服务端
    mysql的sql文件的备份与还原
    Virtualbox后台管理之VBoxManage
    主从库延迟对项目质量的影响
    jenkins / ant / jmeter 持续集成接口自动化
    infer 检验IOS项目
    pmd静态代码分析
    利用线上数据验证系统 Gor
    python flask (一)
    python SQLAlchemy
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/7219345.html
Copyright © 2011-2022 走看看