• 不可轻视复制构造函数


    如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”
    的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐
    含了错误。以类 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 的私有函数。

  • 相关阅读:
    基础数据类型之字符串str
    python编码基础知识
    python逻辑运算之and、or
    Django中消息中间键和form组件的运用
    Django中 cookies and session的使用
    JavaScript 正则制表符,单词边界,去空格
    paramiko堡垒机、线程及锁
    0911 Socket网络编程
    os.system和os.popen
    类高级方法、反射、异常、动态导入模块
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/7219345.html
Copyright © 2020-2023  润新知