
effective C++
nikola_zhou
这个作者很懒,什么都没留下…
展开
-
条款3,尽量使用const
条款03:尽可能使用 const const允许你指定一个语义约束,也就是指定一个“不该被改动”的对象。const如果出现在星号左边,表示被指物是常量,如果出现在星号右边,表示指针自身是常量:如果出现在星号两边,表示被指物和指针都是常量。如果被指物是常量,有些程序会将关键字const写在类型之前,有些人会把它写在类型之后,星号之前。两种写法意义相同:void f1(const ...原创 2018-12-27 10:14:47 · 196 阅读 · 0 评论 -
条款1&2
条款1:视C++为一个语言联邦最简单的理解C++语言是将它 视为一个由相关语言组成的联邦而非单一语言。C++并不是一个带有一组守则的一体语言,它是从四个次语言组成的联邦政府,每个此语言都由自己的规则。分别是C,Object-Oriented C++,Template C++,STL。为了能高效率的编程,所以在每次切换语言的时候,都可能会遵循它们自己的规则。C++高...原创 2018-12-17 21:26:38 · 138 阅读 · 0 评论 -
条款4 确认对象在被使用前已被初始化
1。最佳的处理方式是:永远在使用对象之前先将它初始化。对于无任何成员的内置类型,你必须手动完成此事。至于内置类型以外的任何其他东西,初始化的责任落在构造函数身上:确保每一个构造函数都将对象的每一个成员初始化。但是别混淆了赋值喝初始化。 2.构造函数的一个较佳写法是,使用所谓的member initialization list 替换赋值动作。这样效率较高。因为处置列中针对各个成员变量而设的...原创 2019-01-03 22:33:40 · 136 阅读 · 0 评论 -
条款5 了解C++默默编写并调用哪些函数
1.empty class 在C++处理过后就不再是一个empty class.编译器会为它声明一个copy 构造函数,一个copy assignment操作符,一个析构函数。此外你如果你没有声明任何构造函数,编译器也会为你声明一个default构造函数。所有这些函数都是Public且inline。所以:class Empty{};就如同:class Empty{ public: ...原创 2019-01-04 20:42:49 · 220 阅读 · 0 评论 -
条款6:若不想使用编译器自动生成的函数,就该明确拒绝
1.当希望编译在调用copy 和 copy assignment 函数报错的时候,(比如代码逻辑中该class完全不应该也不能被copy和copy assignment)。需要想办法既不自己完成这两个函数,也不让编译器生成的函数被调用。 2.可以尝试将这个两个函数声明为private函数,但是不够安全。因为member和friend函数依然可以调用这两个函数。 3.所以在声明...原创 2019-01-12 18:06:40 · 218 阅读 · 0 评论 -
条款7:为多态基类声明virtual析构函数
假设,有一个父类:class TimeKeeper{ public: TimeKeeper(); ~TimeKeeper(); ... }; 然后假设有很多子类:class AutomicClock : public TimeKeeper{...};class WaterClock : public TimeKeeper{...};class WristWatch :...原创 2019-01-12 18:08:25 · 191 阅读 · 0 评论 -
条款8:别让异常逃离析构函数
C++不反对但也不鼓励在析构函数中吐出异常。 假设有一个负责连接数据库资源的class:class DBConnection {public:...static DBConnection create();void close();};然后有一个负责DBConnection资源管理的class:class DBConn { public: ... ~DBCo...原创 2019-01-15 09:12:51 · 230 阅读 · 0 评论 -
条款9:绝不在构造函数和析构过程中调用virtual 函数
假设有这样一个class,它记录了交易的买进和卖出情况:class Transaction{ public: Transaction(); virtual void logTransaction() const = 0; //一份因交易内容不同 ...原创 2019-01-21 21:22:47 · 141 阅读 · 0 评论