当计算环境(Java和.NET)夸耀自己内置“垃圾回收能力”的当今,C++对内存管理的纯手工法也许看起来有点老气。但是许多苛刻的系统程序开发人员之所以选择C++,就是因为它允许他们手工管理内存。
继续阅读“Customizing new and delete-49,51,52”
分类:Effective C++ 3rd
Implementations-27,30
27.Minimize casting.(尽量少做转型动作)
C++规则的设计目标之一是,保证“类型错误”绝不可能发生。不幸的是,转型(casts)破坏了类型系统。
继续阅读“Implementations-27,30”
Design and Declaration-25
25.Consider support for a non-throwing swap.(考虑写出一个不抛出异常的swap函数)
swap是个有趣的函数。原本它只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来处理自我赋值可能性的一个常见机制。
继续阅读“Design and Declaration-25”
Design and Declaration-20,21
20.Prefer pass-by-reference-to-const to pass-by-value.(宁以pass-by-reference-to-const替换pass-by-value)
(1)缺省情况下C++以by value方式传递对象至函数。而调用端所获得的亦是函数返回值的一个复件。
继续阅读“Design and Declaration-20,21”
Resourse Mangement-16,17
16.Use the same form in corresponding uses of new and delete.(成对使用new和delete时要采取相同形式)
(1)先来看一个错误的示例:
继续阅读“Resourse Mangement-16,17”
Resourse Mangement-13,14,15
C++程序中最常使用的资源就是动态分配内存,但内存只是你必须管理的众多资源之一。其他常见资源还包括文件描述符(file descriptors)、互斥锁(mutex locks)、数据库连接以及网络sockets等。
继续阅读“Resourse Mangement-13,14,15”
Constructors, Destructors, and Assignment Operators
5.Know what functions C++ silently writes and calls.
(1)如果我们自己没有声明,编译器就会为它声明一个copy构造函数、一个copy assignment操作符和一个析构函数。此外如果我们没有声明任何构造函数,编译器也会为你声明一个default构造函数。这些函数都是public且inline的。
继续阅读“Constructors, Destructors, and Assignment Operators”
Accustoming Yourself to C++
1.View C++ as a federation of languages.
(1)一开始C++只是C加上一些面向对象特性。C++最初的名称C with Classes。随着这个语言逐渐成熟,它开始接受不同于C with Classes的各种观念、特性和编程战略。
继续阅读“Accustoming Yourself to C++”