
Effective C++
michael019
这个作者很懒,什么都没留下…
展开
-
Effective C++ ——规则1-3
Item1:尽量用const 和inline ,而不要使用define说明1:尽量用编译器而不是预处理器,因为预处理指令不是C++语言的一部分,不能直接对它们进行编译和链接。 注:C/C++提供的预处理功能主要有文件包含、宏替换、条件编译等。 说明2:#define PI 3.1415926 编译器永远不会看不到PI这个符号名,因为预处理器会先于编译器处理PI,PI不会加入到符号列表中。如原创 2015-09-15 11:23:23 · 329 阅读 · 0 评论 -
Effective C++——必须返回对象时,别妄想返回其引用或指针
pass-by-value与pass-by-reference比较起来效率低很多,优先选择后者。但要注意有时候返回引用或指针会带来问题。class Rational{ public: friend const Rational& operator*(const Rational& lhs,const Rational& rhs) { Rational res原创 2015-09-22 14:08:06 · 431 阅读 · 0 评论 -
Effective C++——资源管理
C++ 中的资源类型:1.最为常见也最为熟知的是内存资源 2.文件描述器 3.互斥锁 4.数据库连接 5. socket 6.GUI 中 的字型、笔刷等在不再使用这些资源时,确保释放掉这些资源是必须的。但现实往往很难,由于异常出现、函数内多重回传路径、程序后期维护者未能理解前者的意图导致的维护异常等一、以对象管理资源1.定义一个类,class Person{}; 2.Person* CreateP原创 2015-09-21 16:58:26 · 432 阅读 · 0 评论 -
Effective C++ —— 别让异常逃离析构函数
C++ 并不禁止析构函数吐出异常,但不鼓励这么做。 1.如果一个被析构函数调用的函数可能抛出异常,则析构函数应该捕获这些异常,然后终止程序或吞下它们。 2.如果客户需要对某个函数在运行中抛出的异常做出反应,那么这个类应该提供一个普通函数(非析构函数)执行该操作。class Widget{ public: Widget(); ~Widget() {}};voi原创 2015-09-20 13:08:27 · 435 阅读 · 0 评论 -
Effective C++——operator =
**让operator = 返回一个reference to *this**#include <iostream>using namespace std;class Widget{public: Widget(){} ~Widget(){} Widget& operator=(const Widget& obj) { //TODO:赋值操作原创 2015-09-18 16:48:34 · 774 阅读 · 0 评论 -
Effective C++ ——初始化
初始化,一个老生常谈的话题,你都掌握了吗? 1.初始化和赋值 不是一个概念,记住这点很重要 2.内置类型的初始化 确保在使用之前先初始化,定义时即初始化,避免很多诡异的问题出现。 3.非内置类型的初始化 构造函数负责初始化工作,对于类成员变量,初始化工作发生在进入构造函数之前,在构造函数内部进行的都是赋值动作,不是初始化。 4.使用初始化列表进行初始化class原创 2015-09-17 15:49:38 · 371 阅读 · 0 评论 -
Effective C++——尽可能使用const
const 关键字威力强大,应用场景很多:指针,迭代器,引用类型,函数参数,函数返回值,类成员函数等一个复数类Complexclass Complex{public: Complex(int real, int imag) :imag_(imag), real_(real) {} ~Complex(); friend const Complex operator原创 2015-09-17 14:05:28 · 485 阅读 · 0 评论 -
Effective C++ —— 构造析构赋值
一个空类,经C++编译器编译之后,会有哪些内容呢?#include <iostream>#include <list> class Animal{};void main(){ Animal tiger;//无参构造函数 Animal lion(tiger);//拷贝构造函数 Animal rabbit = lion;//赋值运算符函数 std::cin.get()原创 2015-09-17 17:26:32 · 328 阅读 · 0 评论 -
Effective C++ ——为多态基类声明虚析构函数
1.多态基类需要声明一个virtual 析构函数 2.不作为基类的类则不需要声明virtual 析构函数,否则是个馊主意,因为虚函数会增加类的体积class Animal{public: Animal() { cout << "基类构造函数" << endl; } virtual ~Animal() { cout << "原创 2015-09-17 17:53:08 · 505 阅读 · 0 评论 -
类之间常见关系
1.使公有继承体现 “是一个” 的含义记住一句话:公有继承意味着 “是一个” 的含义! class Person { … };class Student: public Person { … };每个学生是一个人,但并非每个人是学生。void dance(const Person& p); // 任何人可以跳舞 void study(const Student& s);原创 2016-01-20 11:45:08 · 436 阅读 · 0 评论