effective-c++
莲娃
充实就好
展开
-
Effective C++第三章-资源管理-2
成对使用new和delete时要采取相同形式当你使用new(也就是用过new动态生成一个对象),有两件事发生:第一,内存被分配出来(通过名为operator new函数)第二,针对此内存会有一个(或更多)析构函数被调用。当你使用delete,也有两件事发生:针对此内存会有一个(或更多)析构函数被调用然后内存才释放(operator delete)。当你对着一个指针使用delete,因为单一原创 2017-06-30 16:05:16 · 298 阅读 · 0 评论 -
Effective C++第七章-模板和泛型编程之traits和TMP(模板元编程)
traitstraits不是C++关键字或一个预先定义好的构件,是一种技术,也是一个C++程序员共同遵守的协议。该技术要求对内置(built-in)类型和用户自定义类型的表现必须一样好。traits允许你在编译期间取得某种类型信息,习惯上traits总被实现为struct。标准技术是把traits放进一个template及其一或多个特化版本中。这样的template在标准程序库中有若干个,其中原创 2017-07-19 09:16:40 · 671 阅读 · 0 评论 -
Effective C++第七章-模板和泛型编程之需要类型转换时请为模板定义非成员函数
需要类型转换时请为模板定义非成员函数在条款24中,class Rational{public: const int numerator() const {return n;} const int denominator() const {return d;}private: int n,d;};const Rational operator*(const Ratio原创 2017-07-19 09:14:12 · 338 阅读 · 0 评论 -
Effective C++第七章-模板和泛型编程之模板中实现继承
模板中实现继承(成员函数模板(之一:泛化copy构造函数))真实指针做得很好的一件事是支持隐式转换(implicit conversion)。Derived class指针可以隐式转换为base class指针,“指向non-const对象”的指针可以转换为“指向const对象”….等等。class grapa{...};class dad:public grapa{...};class son原创 2017-07-19 09:11:58 · 305 阅读 · 0 评论 -
Effective C++第七章-模板和泛型编程之模板特化和代码膨胀
模板特化class A{public: void func1(); void func2();};class B{ public: void func1(); void func2();};template<typename company>class manager{public: void dofun1() { c原创 2017-07-19 09:10:24 · 971 阅读 · 0 评论 -
Effective C++第七章-模板和泛型编程之typename与嵌套从属名称
typename在template的声明式中template< class T>//声明方法1template< typename T>////声明方法2,使用typename 可以暗示参数不一定是一个class类型使用方法1和方法2意义完全相同。但是涉及嵌套从属名称时只能使用关键字typename:template<typename C>void print1st(const C& co原创 2017-07-19 08:56:57 · 1399 阅读 · 3 评论 -
Effective C++第七章-模板和泛型编程之编译期多态(运行期多态)和隐式接口(显式接口)
运行期多态(虚函数)和编译器多态(模板)运行期多态的说明示例:class Animal //基类{public : virtual void shout() = 0;};class Dog :public Animal{public: virtual void shout(){ cout << "汪汪!"<<endl; }};class Cat :public原创 2017-07-19 08:52:15 · 441 阅读 · 0 评论 -
Effective C++第六章-继承与面向对象设计
几种继承方法类型之间的public继承–is a(derived class is a base class.)类型之间的复合关系–has a或根据某物实现出class address{...};class phonenumber{...};class person{public:...private:std::string name;address theaddress;ph原创 2017-07-09 10:04:56 · 301 阅读 · 0 评论 -
Effective C++第五章-实现
不只应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。这样不仅能够避免构造(和析构)非必要对象,还可以避免无意义的default构造行为。尽可能延后变量定义式的出现时间//不理想编码std::string encryptPassword(const std::string& password)//encrypt加密{ using nam原创 2017-07-06 16:23:11 · 249 阅读 · 0 评论 -
Effective C++第一章
为了理解C将其分为四个次语言对于单纯常量最好以const对象或enums替换defines对于形似函数的宏最好改用inline函数替换defines强大的const确定对象被使用前已先被初始化对于无任何成员的内置类型必须手工完成此事内置类型以外的任何其它初始化责任落在构造函数身上确保每一个构造函数都将对象的每一个成员初始化为免除跨编译单元之初始化次序问题请以local static 对原创 2017-03-09 15:47:48 · 290 阅读 · 0 评论 -
Effective C++第一章
为了理解C将其分为四个次语言对于单纯常量最好以const对象或enums替换defines对于形似函数的宏最好改用inline函数替换defines强大的const确定对象被使用前已先被初始化为了理解C++,将其分为四个次语言: 次语言 面向对象 class(析构函数,构造函数)、封装、继承、多态、virtual函数…. Template C++ C++泛型编程部分原创 2017-06-21 16:45:33 · 209 阅读 · 0 评论 -
Effective C++第二章-构造,析构,赋值-1
编译器可暗自为类创建default构造函数、copy构造函数、copy 赋值操作符和析构函数当你写一个空类class Empty{};如果你自己没有声明,则编译器会声明一个copy构造函数、一个copy 赋值操作符和一个析构函数。此外,如果你没有声明任何构造函数,编译器也会为你声明一个default构造函数。所有这些函数都是public且inlineclass Empty{ public:原创 2017-06-23 09:27:25 · 275 阅读 · 0 评论 -
Effective C++第二章-构造,析构,赋值 -2
operator=返回一个reference to * this协议:赋值操作符必须返回一个reference指向操作符(&)的左侧实参。class Widget{public:... Widget& operator=(const Widget& rhs) { ... return* this; }};该协议适用于所有赋值相关运算只是协议,如果不遵循代码一原创 2017-06-26 15:48:24 · 218 阅读 · 0 评论 -
Effective C++第四章-设计与声明-2
接口函数应该为public而数据一般不应为public如果没有继承,类只有两种用户:类本身的成员和该类的用户。用户只能访问public接口,类成员和友元既可以访问public成员也可以访问private成员。有了继承,就有了类的第三种用户:从类派生定义新类的程序员。派生类不能访问基类的private,可以访问基类的protect。从封装角度看,其实只有两种访问权限:private(提供封装)和其他原创 2017-07-04 21:31:22 · 220 阅读 · 0 评论 -
Effective C++第四章-设计与声明-1
多态类型多态类型在作为接口时有数据保护和隐藏的效果。多态分为两种:通用多态和特定多态通用多态:对工作的类型不加限制,允许对不同类型的值执行相同的代码又分为参数多态(parametric)和包含多态(inclusion)参数多态:采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。例如,模板类。包含多态:同样的操作可用于一个类型及其子类型(注意是子类型,不是子类)。包含多态一般需要进行原创 2017-07-03 16:30:39 · 263 阅读 · 0 评论 -
Effictive C++导读
导读命名空间std是几乎所有C++标准程序库元素的栖身处声明式,告诉编译器名称和类型 extern int x;//对象声明式 class Widget;//类的声明式 template< typename T>//模板声明式 class GraphNode;定义式,对对象而言,定义式是编译器为此对象拨发内存的地点初始化,给予对象初值的过程explicitc原创 2017-03-07 10:37:05 · 278 阅读 · 0 评论 -
Effective C++第三章-资源管理-1
C++的资源:动态分配内存文件描述器数据库连接网络sockets互斥锁图形界面中的字型和笔刷以对象管理资源(又称为资源取得时机便是初始化时机,resource acquisition is initialization,RAII)单纯依靠调用端执行delete语句是行不通的:一般调用端函数使用了函数(Create函数)返回的对象后,有责任删除之。但在以下情况下可能使得调用端函数来原创 2017-06-30 14:38:39 · 215 阅读 · 0 评论 -
Effective C++第八章-new和delete
了解new-handle的行为当operator new抛出异常以反映一个未获满足的内存需求之前,它会先调用一个客户指定的错误处理函数,一个所谓的new_handle。(new真正做的事情稍微更复杂些)为了指定该函数,客户必须要调用set_new_handler,那是声明于< new >的一个标准程序库函数:namespace std{ typedef void(* new_handler)原创 2017-07-19 16:19:43 · 294 阅读 · 0 评论