[系列教程] 通往现代c++之路之1 --- 你要摒弃的几个 c++ 陋习


#1

大家好, 这是系列教程 <<通往现代C++之路>> 的开始. 希望大家多多支持. 也希望为了让更多的人了解C++, 希望大家能尽力的宣传 avboost.com, 好让作者有更新下去的动力.


第一讲 : 你要摒弃的 C++ 陋习

内存管理

现代 C++ 程序没显式的内存管理, 马上回去查看你的程序里是否有显式的 new/delete 操作, 如果有, 就不符合现代 C++的要求.

现代C++程序, 尽可能的使用栈对象而不是堆对象.

现代C++ 程序, 通过使用 STL 容器来避免手工管理内存.

指针

确定需要动态的分配对象, 请务必不要使用 裸指针 来引用分配的对象, 而是尽量使用智能指针. 依据对象的使用类型, 使用 shared_ptr , scoped_ptr , unique_ptr . 对于 shared_ptr 可能造成的循环引用, 使用 weak_ptr 来打破.

智能指针将程序员从内存泄露的深渊里解放出来

函数指针

请务必使用 std::function 代替函数指针. 使用函数对象, 就意味着拥有了利用 std::bind 创建闭包的无限可能性. 拥有了 使用 lambda 表达式的能力. 大大提升了函数的灵活性.

虚函数

需要运行时多态的地方, 请尽可能的使用 std::function 和 boost::signals2 , 他们拥有了闭包的能力, 将拥有 免继承 的同时带来无限的可能性. 尽可能的使用 模板来提供多态.

继承

请尽量使用组合而不是继承. 尽量不要利用 “继承” 作为接口.


对于内存管理问题, 可以参考的内容有

对于函数指针问题, 可以参考的内容有

对继承作为接口的批评有

关注效率

我把关注效率的问题列为 陋习之一。 因为过早的关注效率, 将导致糟糕的设计,糟糕的编码。 而且有可能导致你转向更没效率的动态语言 — ? 这是怎么说呢?

手工 vs 自动。 因为过早关注效率, 你选择了手工。 因为手工导致频繁出错, 导致编码的负担增加,导致代码的不优雅。 最终转向动态语言。 效率比一开始就选择了优雅的实现方式要差的更多。

针对效率问题, 我这里有个告诉你编译器比你更会优化的教程


#2

现代 C++ 程序看起来应该更像是其它高级语言写出来的程序,有强大的库,而不是 C with Classes.


#3

这条不敢认同,因为改limit 不是每个人都愿意的吧:)


#4

那么应该使用什么申请内存?


#5

使用 STL 容器。


#6

帖子内容已经更新到主题


#7

好NB的功能,我也试试:

av


#8

关注效率

我把关注效率的问题列为 陋习之一。 因为过早的关注效率, 将导致糟糕的设计,糟糕的编码。 而且有可能导致你转向更没效率的动态语言 — ? 这是怎么说呢?

手工 vs 自动。 因为过早关注效率, 你选择了手工。 因为手工导致频繁出错, 导致编码的负担增加,导致代码的不优雅。 最终转向动态语言。 效率比一开始就选择了优雅的实现方式要差的更多。


#9

本主题已置顶,它将始终显示在它所属分类的顶部。


#10

赞,有了boost::function, 动态绑定的问题就清晰了很多,不用太纠结了


#11

#12

本主题已全局置顶,它将始终显示在它所属分类的顶部。可以由版主解除置顶或者点击清除置顶按钮。


#13

#14

栈有上限,函数调用层太多,可能会有问题吧!