zoukankan      html  css  js  c++  java
  • 了解 C++ 默默编写并调用的函数

    前言

      对于一个类来说,最最基础的三类成员函数莫过于:构造函数,析构函数以及拷贝函数 (copy构造函数和=重载函数)。即使你的类没有为这些函数做出定义,C++ 也会自动为你创建。本文将讲述的是 C++ “偷偷”为你创建的这三个函数究竟是怎么样的。

      了解这些,能更清楚代码是如何运转的,从而写出自己需求的(这三类)函数,确保对象高效,节约。

    默认的构造函数和析构函数

      默认的构造函数/析构函数主要负责调用其基类的构造函数/析构函数。

    默认的copy构造函数和=重载函数

      默认的这两个函数仅仅是将对象的成员进行简单赋值。

      这就意味着,如果该类的成员是指针类型,那么当该类的两个对象之间发生赋值后,这两个对象中的指针就会指向同一片内存区。这种情况下,内存管理就会复杂起来,后面的文章中会详细讲解如何解决这个问题 - 在类的不同对象之间共享内存区。

      有时候,如果你不需要在内存中实现共享,完全可以自行定义这两个函数,为被赋值的对象分配新的内存区。

      那么,如果类成员是引用类型呢?如果对象之间成员只是简单的复制,那么岂非出现一个引用型变量引用了新的变量?这是违反 C++ 的”不允许引用型变量改指向不同的对象“这一原则的。

      答案是 - C++ 会拒绝编译那一行的赋值操作。

    小结

      1. 编译器所做的工作等效于:

    1 class Empty {
    2 public:
    3     Empty(){}    // 缺省构造函数
    4     Empty(const Empty &rhs){}    // 缺省拷贝构造函数
    5     ~Empty(){}    // 缺省析构函数
    6     Empty & operator= (const Empty &rhs);    // 缺省赋值运算符重载函数
    7 };

      2. 如果 C++ 默认为你定义的这三类函数不合你的要求,这也是经常发生的,那么你就需要结合实际情况,定制出最适合自己的函数。

      3. 这三类函数非常重要,请一定要确保其正确性,效率性,否则项目后期因此而产生的内存泄露等问题是非常让人头大的。

  • 相关阅读:
    hadoop——数据清洗测试
    本地配置hadoop
    从textarea中获取数据后按原样显示
    form自动提交
    艺术和代码的结合 turtle + python 的结合
    python-->微信支付
    python-图片流传输(url转换二维码)
    python-qrcode-二维码
    Java 通过先序中序序列生成二叉树
    Java 实现二叉树的构建以及3种遍历方法
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3932634.html
Copyright © 2011-2022 走看看