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 的私有函数。

  • 相关阅读:
    我知道开发已经接近于成功了
    反射获取运行时属性值的替代方法
    Fix Visual Studio 2013 Razor CSHTML Intellisense in Class Library or Console Application
    领域模型
    UI设计心得
    ADO.NET EF 中的实体修改方法
    .net与com组件
    win8设置开机启动项
    编程架构
    禁止UITextField 使用粘贴复制功能
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/7219345.html
Copyright © 2011-2022 走看看