随笔分类 -  Effective C++

Effective C++ 第三版读书笔记
摘要:operator= 赋值运算符,目的是想给当前对象赋值一个新的值。 比如: 有一个类A: A myclass1; A myclass2; myclass1 = myclass2; //调用赋值运算符 返回值为对象的引用目的是为了连锁赋值 x = y = z = 0; 为了实现连锁赋值,赋值运算符必须 阅读全文
posted @ 2017-10-13 23:26 CoderZSL 阅读(189) 评论(0) 推荐(0)
摘要:在构造函数中调用virtual函数时,base class构造期间virtual函数是不会下降到derived class层 如: class Transaction{ public: Transaction(); virtual void logTransaction() const = 0; } 阅读全文
posted @ 2017-10-01 15:06 CoderZSL 阅读(142) 评论(0) 推荐(0)
摘要:例如: class Widget { public: ~Widget(){...} }; void doSomething() { vector<Widget>v; } 如果v中有10个Widget,销毁第一个时发生析构函数抛出异常,销毁第二个时析构函数又抛出异常,那么两个异常同时存在的情况下:程序 阅读全文
posted @ 2017-10-01 15:05 CoderZSL 阅读(137) 评论(0) 推荐(0)
摘要:1.假设有如下时间类: class TimeKeeper { public: TimeKeeper(); ~TimeKeeper(); }; class AtomicClock :public TimeKeeper {}; factory函数(用户只是想调用时间,而不想操心时间如何计算等细节):Ti 阅读全文
posted @ 2017-10-01 15:01 CoderZSL 阅读(140) 评论(0) 推荐(0)
摘要:如果自己定义的类中并不需要copy assignment操作符或者copy构造函数,为了避免编译器自动生成 因为编译器自动生成的没什么用,一般是按照顺序进行赋值或者拷贝,对于有对象内含有指针的话可能会出现一些问题 可以在private中声明(并不定义)它们。但是,友元和成员函数依然可以调用它们。 在 阅读全文
posted @ 2017-10-01 14:58 CoderZSL 阅读(166) 评论(0) 推荐(0)
摘要:当写下如下空类时: class Empty{}; 编译器处理后变成; class Empty { public: Empty() {}//默认构造函数 Empty(const Empty&) {}//默认拷贝构造函数 ~Empty(){}//默认析构函数 Empty& operator=(const 阅读全文
posted @ 2017-10-01 14:48 CoderZSL 阅读(205) 评论(0) 推荐(0)
摘要:1.两种不同的常量:const在*左边表示被指物为常量,在右边表示指针为常量 * 常量指针:不可以改变指向的位置,但可以改变被指的内容(int* const num = 5); * 指针常量(指向常量的指针):可以改变指针指向的位置,但是不可以改变被指物的内容(const int* num = 5); 2.STL标准库中的迭代器 vector vec; const vector::... 阅读全文
posted @ 2017-10-01 14:47 CoderZSL 阅读(192) 评论(0) 推荐(0)
摘要:一. 永远在使用对象之前将它初始化 1.对于内置类型,手动完成初始化。 例如:int =0; 2.除了内置类型之外的类型,由构造函数进行初始化:确保每个构造函数都将对象的每一个成员进行了初始化。 二. 特别区分“赋值”和“初始化” 例如:有一个类:A中有一个成员变量string name; 有一个构 阅读全文
posted @ 2017-10-01 14:47 CoderZSL 阅读(183) 评论(0) 推荐(0)
摘要:1.#define不被视为语言的一部分,并且使用常量会比#define导致较小的码 2.常量替换#define的两种情况 定义常量指针(当指针所指物为常量时,应该有两个const),const char* const A = “zhou”; class中的常量:将常量的作用域限制在类中,因此必须为类 阅读全文
posted @ 2017-10-01 14:46 CoderZSL 阅读(181) 评论(0) 推荐(0)