Effective C++学习笔记 (7)

effective c++ 和 more effective c++中知识点 尽可能使用 const在 C++ 编程中,尽可能使用。 阅读详情

本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教尴尬

条款7:为多态基类申明virtual析构函数

         其实该条款在任何一门C++课堂上老师都会讲到,把基类的析构函数申明为virtual的,这样一来在接口释放时候子类才能被正真析构。

1、  先来看看编译器是如何帮我们实现的,对于基类析构函数不为虚函数的情况

代码和编译生成的汇编如下:



将父类的袖狗函数申明为虚函数以后


可以看到原来调用基类析构函数的地方变成了call eax,很明显是一个虚函数调用,跟进去一看就是子类的析构函数。

2、  第一个问题相信大部分人都没问题,但是是不是所有基类的析构函数都申明为虚函数呢?当然不是,该条款标题写的很明白只是为多态基类申明。因为有的时候会将一个类转换为一个特定的结构,如果定义了虚函数,那么这个类的开始地方就不再是第一个成员变量了,而是虚表的位置了,所以这么赋值就会出错。但是我在想这种用法其实不是很经常,总之不要画蛇添足吧。

3、  在C++中大家都习惯使用虚函数来实现接口,而且还是纯虚函数,通过一个抽象来来实现接口,在这里需要注意,如果析构函数是纯虚函数,必须有实现,否则会出现连接错误,代码如下:



Effective C++ 学习笔记 第一章:让自己习惯 C++ 本来看这本书已经好几天了,没准备做笔记,但看了几个条款,发现这本书总结的太好了,不记一下,回头忘了不好,如果对其他人有帮助就更好了。 文章目录条款 01:让自己习惯 C++原文建议条款 02:尽量以const, enum, inline 替换 #define话题 1:用 const 和 enum 代替 #define 常量话题 2:用 inline 取代 #define 宏话题 3:#define 不等同于预处理操作原文建议条款 03:尽可能使用 const话题 1:const 修饰指针话题 2:con. 阅读详情

相关推荐

Effective C++学习笔记7

第四章类和函数:设计与声明条款18: 争取使类的接口完整并且最小    条款19: 分清成员函数,非成员函数和友元函数    class rational { public: rational(int numerator = 0, int denominator = 1);     int numerator() const;    int denominator() const;private:

434

C++Effective STL学习笔记Item7

假设我们现在有以下代码: void doSomething() { vector<Widget*> vwp; for (int i = 0; i < SOME_MAGIC_NUMBER; ++i) vwp.push_back(new Widget); ... // use vwp } ...

weixin_30640291的博客 144

《Modern Effective C++学习笔记7 并发API

条款三十五:优先选用基于任务而非基于线程的程序设计 基于任务? auto fut = std::async(doAsyncWork); 基于线程? int doAsyncWork(); std::thread t(doAsyncWork); 基于线程vs基于任务 基于线程未提供获取返回值的途径,而且如果函数抛出异常,程序会终止; 基于线程的程序要求手动管理线程耗尽,超订,负载均衡以及新平台适配等种种; 基于任务拥有默认策略,能够避免以上这些问题; 基...

slxixiha的博客 224

SAP MB52库存查询全解析:从基础操作到高阶应用实战

物料库存管理是企业资源计划(ERP)中的核心环节,它直接关系到供应链的顺畅与成本控制。在SAP系统中,库存查询通过实时追踪物料的存储状态、数量和位置,为生产计划、销售承诺和财务核算提供关键数据支撑。其技术原理在于系统通过整合库存主数据表(如MARD、MSKU)与移动凭证,实现库存状态的动态更新与多维展现。掌握高效的库存查询方法,不仅能提升日常操作效率,更能为库存优化、呆滞料分析和需求预测提供精准依据。在实际应用场景中,用户常需处理跨工厂库存汇总、特殊库存(如供应商寄售、项目专用库存)追踪,以及区分非限制使用

weixin_30776545的博客 346

[C++ 学习笔记 7] Effective C++ 条款 1-4

第一章 让自己习惯 C++ 1、视 C++ 为一个语言联邦 ...

weixin_34232617的博客 98

Effective C++ 学习笔记7

条款10 令赋值操作符返回一个*this对象的引用

菜鸟的成长 404

阿龙的学习笔记---Effective C++---第7章和第8章

7章:模板与泛式编程 第8章:定制new和delete 这俩感觉有些深奥,见得不太多,先补补别的知识,这些之后再看吧。 四舍五入就算《Effective C++》完结撒花了。 ...

阿龙的博客 231

Effective C++ 第三版-学习笔记

Effective C++个人的阅读整理导读部分关键字explicit 导读部分 关键字explicit explicit为显示构造说明符(仅C++)。用来控制不必要的隐式类型转换,目前我只知道explicit用于类声明的构造函数声明中。 举个栗子: class A { public: A(); A(int); A(const char*, int = 0); }; 以下...

freeroo2的博客 309

Effective C++ 学习笔记

C++程序员分为两种,一种是读过Effective C++的,一种是没读过。这本《Effective C++》 能够协助成为高效的C++开发者。简直是C++开发者的分水岭。 必须细读多遍。 本人小硕菜鸡一枚,非科班,准备今年7月从事C++开发者,修炼内功,一天学习一个effective C++条款。欢迎大佬指导讨论。 fighting!

Ref.Ptr.的博客 3846

Effective C++ 学习笔记

无端的将所有的classes的析构函数声明为virtual,就像从未声明他们为virtual一样,都是错误的。定义一个语义约束指定一个不被改动的对象,编译器会强制实施这项措施,你可以在class外部修饰 gloabl或者namespace 作用域中的常量,或者修饰文件,函数,或者区作用域中被生命为static的对象。编译器可以暗自为class 创建默认的构造函数,copy构造函数,copy assignment操作符,以及析构函数。如果出现*两边 则表示被指物和指针两者都是常量。

乐褀的博客 1238

Effective c++学习笔记

Effective c++学习笔记第1章 让自己习惯C++01 视c++为一个语言联邦02 尽量以const、enum、inline替换#define03 尽可能使用const04 确定对象被使用前已先被初始化第2章 构造、析构、赋值运算05 了解C++默默编写并调用哪些函数06 若不想使用编译器自动生成函数,就该明确拒绝07 为多态基类声明virtual析构函数08 别让异常逃离析构函数功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列

沟沟沟的博客 1029

Effective C++学习笔记——条款27

Effective C++学习笔记——条款27:尽量少做转型动作

继续激情,继续奋斗。 1769

Effective C++学习笔记——条款32

Effective C++学习笔记——条款32:确定你的public继承塑模出is-a关系

继续激情,继续奋斗。 1679

effective c++学习笔记

effective c++ 学习笔记

weixin_43646672的博客 568

Effective C++学习笔记

融合了多种编程思维方式这四种范式不是“可选”的,而是交织在一起的,你必须都懂,才能看懂别人写的代码,甚至才能看懂标准库。1.静态成员变量:只有一份存储,不属于任何对象 → 编译器必须在一个翻译单元里给它真正的内存定义。规则是:声明放在类体内(带 )。定义(即分配存储)放在类外且只能出现一次;通常放在 文件。例外:如果它是整型或枚举类型的 const 静态成员,并且初始化值是常量表达式,C++11 起允许在类内直接给初值,此时可省略类外定义——只要代码里从不取它的地址或绑定引用即可。一旦有人 或把它传给

weixin_51904572的博客 856

Effective C++学习笔记

Effective C++ 学习1 [条款1--条款30]

zaizai1007的博客 1463
上一篇: Effective C++学习笔记 (6)
下一篇: Effective C++学习笔记 (8)
flyaway2002
博客等级 码龄14年 5粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值