了解C++默默编写并调用哪些函数。Know what functions C++ silently writes and calls

有如下函数会被编译器自动生成,如果在这些函数需要被调用时,且这个对象的作者自己没有创建对应函数。

  1. default 构造函数
  2. 析构函数
  3. copy构造函数
  4. 赋值操作符

注意,只有当这些函数被需要调用时,编译器才会创建这些函数。

对于copy构造函数和赋值操作符,编译器创建的版本只是单纯的将来源对象的每一个Non-static 成员变量拷贝到目标对象。

另外,也会存在编译器拒绝为class 生成赋值操作符或者是拷贝构造函数的情况:

第一:如果父类的拷贝构造函数为private,那么子类不会自动生成拷贝构造函数。因为子类的拷贝构造函数需要调用父类的拷贝构造函数。

第二:只有当生成的代码合法,且有适当机会证明它有意义,对应函数才会自动生成。(以下面为例)

template <T>
class NamedObject
{
public:NamedObject(std::string &name,const T& value);............
private:   Tstd::string &nameValue;const T& objectValue;
}

 

这时,有如下情况:

std::string newDog("Persephone");
std::string oldDog("Satch");
NamedObject<int> p(newDog,2);
NamedObject<int> s(oldDog,3);
p=s;

当代码p=s这一句时,编译器会为NamedObject 生成赋值操作符函数,但是,C++ 不允许引用类型被初始化以后再指向其他对象。所以这里,编译器的动作是拒绝生成赋值操作符函数。因此编译失败。

转载于:https://www.cnblogs.com/lucy-lizhi/p/7443062.html

Effective C++ 条款05相关推荐

  1. Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)

    Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls) 条款05:了解C++默默编写 ...

  2. Effective C++条款05:了解C++默默编写并调用哪些函数

    class Empty{};class Empty{Empty(){};Empty(const Empty& rhs){};~Empty(){};Empty& operator=(co ...

  3. Effective C++:条款05:了解C++默默编写并调用哪些函数 (Know what functions C++ silently writes and calls.)...

    编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数. 转载于:https://www.cnblogs.com/elite/arc ...

  4. effective c++条款11扩展——关于拷贝构造函数和赋值运算符

    effective c++条款11扩展--关于拷贝构造函数和赋值运算符 作者:冯明德 重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符. 以下讨论中将用到的例 ...

  5. Effective C++条款09:绝不在构造和析构过程中调用virtual函数

    Effective C++条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruc ...

  6. effective c++条款44 将与参数无关的代码抽离templates

    effective c++条款44 将与参数无关的代码抽离templates 首先了解这个条款的含义:使用template可能导致代码膨胀,二进制码会带着重复(或者几乎重复)的代码.数据,或两者.其结 ...

  7. Effective C++ 条款02:尽量使用const,enum,inline替换#define

    Effective C++ 条款02:尽量使用const,enum,inline替换#define 用另一句话说:用编译器代替预处理器比较好. 举个例子:加入定义一个常量: #define ASPEC ...

  8. Effective C++条款40:明智而审慎地使用多重继承(Use multiple inheritance judiciously)

    Effective C++条款40:明智而审慎地使用多重继承(Use multiple inheritance judiciously) 条款40:明智而审慎地使用多重继承 1.多重继承的两个阵营 2 ...

  9. Effective C++条款39:明智而审慎地使用private继承(Use private inheritance judiciously)

    Effective C++条款39:明智而审慎地使用private继承(Use private inheritance judiciously) 条款39:明智而审慎地使用private继承 1.pr ...

最新文章

  1. 《Datawhale南瓜书》出版啦!
  2. python元组类型的变量以及字符串类型的变量作为参数进行传值
  3. 吴恩达演讲直指AI落地三大挑战,并提出解决方案(附视频)
  4. Xilinx zynq的资料获取总结
  5. golang 标准库strings包 简介
  6. cms php vue 开源_骑士CMS文件包含+getshell
  7. LeetCode Flatten a Multilevel Doubly Linked List(dfs)
  8. python3 修饰器_【python3】修饰器简单理解
  9. NIO通信,仿QQ基本聊天业务,交流篇
  10. css3中变形与动画(三)
  11. matlab 图像语义分割,笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)...
  12. 凸优化第六章逼近与拟合 6.4 鲁棒逼近
  13. IOS-音乐播放器(附Demo)
  14. 自动化 c语言学不会,为什么那么多人学不会PLC自动化编程?
  15. 日本語トレーニング(二十二)
  16. sap scc4 客户端设置(设置生产机不可更改代码)
  17. 英特尔老款CPU支持虚拟化对照表(转)
  18. QQ群发精灵V3.2
  19. vue日历加法定假假日
  20. Blender SMPL-X 插件安装

热门文章

  1. 【php】(转载)分享一个好用的php违禁词 处理类
  2. iOS学习笔记(1)--认识Xcode6.1的Interface Builder和常用快捷键
  3. HTML form 标签的 accept-charset 属性
  4. (转)正则表达式语法备忘录
  5. (转)Silverlight数据校验之INotifyDataErrorInfo
  6. Ubuntu8.10安装Netbeans6.7中文乱码解决方案
  7. 一步一步SharePoint 2007之十二:实现Form认证(2)——创建添加管理帐户的工程
  8. ufs 固态硬盘_NVMe SSD新利器?WTG最高级别评分 阿卡西斯NVMe M.2移动固态硬盘盒评测...
  9. python函数参数定义不合法_下列哪种函式参数定义不合法?
  10. leetcode算法题--1比特与2比特字符