剑指offer笔记-c++
1.定义一个空的类型,sizeof的结果是1。
虽然空的类型本身并没有任何的信息,但是当我们声明这个类型的实例的时候,内存中应当占有一个空间,否则无法对实例进行调用,所以sizeof的结果不为0,具体多少会有编辑器决定,vscode的结果是1。
同时注意空类型在声明时编译器不会生成默认的构造函数等,因为编译器只会在需要的时候生成6个成员函数:一个缺省的构造函数、一个拷贝构造函数、一个析构函数、一个赋值运算符、一对取址运算符和一个this指针。不需要的时候是不会生成的
如果像空类型中加入析构函数和构造函数,sizeof的结果依旧不会变,因为这些内部函数调用的时候是寻找函数地址,而函数地址只与类型相关,而和类型的实例并不相关,所以无论内部函数如何,实例当中是没有相关信息的
而如果改成虚函数,就不一样了,会生成一个虚函数表,并且每个实例中会有一个指向虚函数表的指针,这个时候,实例的sizeof其实就是指针的大小
2.拷贝构造函数不能传值的原因
比如date (const date d1),这是一个传值的拷贝构造,而const date d1是一个形参,形参在本质上是开辟一块生命周期和函数一样的内存,并拷贝实参存放于此的,那么这个时候又会调用data的拷贝构造函数,这样无限循环,最终会导致保存运行节点的栈溢出(因为递归是有次数限制的,这个限制一般由编辑器给出,默认是几千的数量级),所以在拷贝构造的时候要使用引用,因为引用的本质是指针常量:数据类型 * const 变量名。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探