Effective C++
文章平均质量分 62
Cape0915
这个作者很懒,什么都没留下…
展开
-
Effective C++ 条款8:别让异常逃离析构函数
建议析构函数绝对不要吐出异常.如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序. 如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么 class 应该提供一个普通函数(而非在析构函数中)执行该操作. 两点理由如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会原创 2017-09-04 10:13:15 · 426 阅读 · 0 评论 -
Effective C++ 条款9:绝不在构造和析构过程中调用virtual函数
建议在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层)换句话说:在构造函数和析构函数中,virtual函数失去多态性。 试想一下,假设此时在构造函数和析构函数中,virtual函数没有失去多态性,会出现什么问题。我们知道构造次序吧,先构造base类部分,再构造derived部分。 那么在base类构造过程中,d原创 2017-09-04 11:22:17 · 416 阅读 · 0 评论 -
Effective C++ 条款25:考虑写出一个不抛异常的swap函数
考虑写出一个不抛出异常的swap函数本节讲解如何自定义一个高效的swap函数对于std名空间中的swap缺省函数如下所示namespace std{ template<typename T> void swap(T& a, T& b) { T temp(a); a=b; b=temp; }}class WidgetIm转载 2017-09-23 11:35:57 · 296 阅读 · 0 评论 -
Effective C++ 条款14:在资源管理器中小心coping行为
上节是对资源的管理说明,有时候我们不能依赖于shared_ptr或者auto_ptr,所以我们需要自己建立一个资源管理类来管理自己的资源。例如建立一个类来管理Mutex锁,现在使用函数处理类型为Mutex的互斥器对象class Lock{public: explicit Lock(Mutex* mu):mutexPtr(mu) { lock(mutexPtr);原创 2017-09-08 11:17:02 · 296 阅读 · 0 评论 -
Effective C++ 条款5:了解C++默默调用并编写了哪些函数
1)编写一个空类,经过编译后,C++默认编写了4个函数。class Empty{};经过编译器处理后会有默认构造函数、复制(拷贝)构造函数、赋值操作符和析构函数。这些函数都是public且inline的。class Empty{public: Empty(){} Empty(const Empty& rhs){} Empty& operator=(const Empty&原创 2017-08-31 16:25:40 · 370 阅读 · 0 评论 -
Effective C++ 条款20:尽量用传引用替换传值
避免浪费时间空间默认情况下,C++的函数调用是传值调用,也就是说形参拷贝实参的内容。考虑以下继承体系:class Person{private: string name; string address;public: Person(){} virtual ~Person(){}};class Student: public Person{private:原创 2017-09-20 10:39:44 · 585 阅读 · 0 评论 -
Effective C++ 条款33:避免遮掩继承而来的名称
考虑下面这段代码:int x; void someFunc(){ double x; //local variable std::cin>>x; //read a new value to local x}作用域图如下: 这个指涉的是local变量x,而不是global变量x,因为内存作用域会的名称遮掩外围作用域的名称。当编译器处于someFunc的作用域内并遭遇名原创 2017-10-02 18:51:52 · 483 阅读 · 0 评论 -
Effective C++ 条款36:绝不重新定义继承而来的non-virtual函数
知识点:多态时:基类(或子类)指针指向子类对象,利用该指针调用成员时关键点看子类对象非多态时:基类(或子类)指针指向子类对象时,利用该指针调用成员时关键点看指针对于基类B和子类D:class B{public: void mf(); ...};class D:public B{...}; 我们知道对于non-virtual函数,子类是既继承接口又继承实现的,在这种情况下原创 2017-10-16 20:05:55 · 416 阅读 · 0 评论