摘要://条款18:让接口容易被正确使用,不易被误用 // 1.如果客户企图使用某个接口而却没有获得他所预期的行为,那么这个代码就不该通过编译。 // 2.促进正确使用的方法包括接口的一致性,以及与内置类型的行为兼容。 // 3.阻止误用的方法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。 // 4.shared_ptr支持自定义删除器,可以方便的用于管理各种资源。 ... 阅读全文
Effective C++ 3.资源管理
2016-08-09 20:21 by szn好色仙人, 217 阅读, 0 推荐, 收藏,
摘要://条款13:以对象管理资源 // 1.C++程序中最常使用的资源就是动态分配内存,并且还包括文件描述器,互斥锁,GDI对象、数据库连接、网络socket等。不管哪一种资源,当不再使用的时候必须将其归还给系统。 // 2.诸如以下代码: void fun(int *p) { ... ... delete p; }//以上代码中,p是指向动态分配的内存,在此... 阅读全文
Effective C++ 2.构造 析构 赋值运算
2016-08-03 20:50 by szn好色仙人, 228 阅读, 0 推荐, 收藏,
摘要://条款07:为多态基类声明virtual析构函数 // 1.若基类的析构函数不定义为虚函数,由于基类的指针或引用可以指向派生类的对象,则在删除基类对象的时候可能会出错,导致破坏数据结构。 // 2.如果一个类不含有虚析构函数,那么通常表示它并不希望其本身成为一个基类。 // 3.不要为普通的类声明一个虚析构函数。这是因为C++为了实现虚函数,会建立一个由函数指针构成的数组,称... 阅读全文
Effective C++ 1.让自己习惯C++
2016-07-28 21:32 by szn好色仙人, 190 阅读, 0 推荐, 收藏,
摘要://条款01:视C++为一个语言联邦 // 1:C++主要包含的语言为: // A:C。说到底C++仍然以C为基础。区块(blocks)、语句、预处理器、内置数据类型、数组、指针等均来自于C。许多时候C++对于问题的解决不过是较高级的C解法。当以C++内的C成分 // 工作的时候,高效编程守则映照出C语言的局限:没有模板,没有异常,没有重载等。 // B:Object-Oriente... 阅读全文
C++Primer 第十九章
2016-07-12 22:08 by szn好色仙人, 292 阅读, 0 推荐, 收藏,
摘要://1.控制内存分配: //A:某些应用程序对内存分配有特殊的需求,因此我们无法将标准内存管理机制直接应用于这些程序。它们常常需要自定义内存分配的细节,比如使用关键字new将对象放置在特定的内存空间中。 //B:如下代码: string *sp = new string("s"); string *arr = new string[10]; // new系列运算符实际上执行了三步操作: // ... 阅读全文
C++Primer 第十八章
2016-07-07 21:38 by szn好色仙人, 228 阅读, 0 推荐, 收藏,
摘要://1.异常:待研究 //2.命名空间: // A:多个库将名字放置在全局命名空间中将引发命名空间污染。 // B:命名空间为防止名字冲突提供了更加可控的机制。命名空间分割了全局命名空间,其中每个命名空间都是一个作用域。 // C:一个命名空间的定义包含两个部分:首先是关键字namespace,随后是命名空间的名字。只要是能出现在全局作用域中的声明就能置于命名空间中,主要为:类,变量(及... 阅读全文
C++Primer 第十七章
2016-07-06 21:44 by szn好色仙人, 231 阅读, 0 推荐, 收藏,
摘要://1.当我们希望将一些数据组合成单一对象,但又不想麻烦地定义一个新的数据结构来表示这些数据的时候,tuple非常有用。其和其伴随类型和函数都定义在头文件tuple中,声明在命名空间std中。 tuple t; //t是一个tuple成员数为n,第i个成员的类型是Ti。所有的成员都进行值初始化。 tuple t(v1, v2,....,vn); //t是一个... 阅读全文
C++Primer 第十六章
2016-06-29 21:40 by szn好色仙人, 227 阅读, 0 推荐, 收藏,
摘要://1.模板定义以关键字template开始,后跟一个模板参数列表,此列表不能为空。编译器用推断出的模板参数来实例化一个特定版本的函数。类型参数前必须使用class或者typename(推荐使用typename)。 template bool comp(T t0, T t1){return t0 > t1;} //2.除了定义类型参数外,还可以在模板中定义非类型参数。一个非类型参数表示一个值... 阅读全文
C++Primer 第十五章
2016-06-28 20:44 by szn好色仙人, 460 阅读, 0 推荐, 收藏,
摘要://17. A(基类) B(派生类)公有继承 公有成员 公有成员 保护成员 保护成员 私有成员 不可见 保护继承 公有成员 保护成员 保护成员 保护成员 私有成员 不可见 私有继承 公有成员 私有成员 保护成员 私有成员 私有成员 不可见 一般来说,公有继承时是Is A的关系,私有继承时是Has A 阅读全文
C++Primer 第十四章
2016-06-20 23:18 by szn好色仙人, 339 阅读, 0 推荐, 收藏,
摘要://1.当运算符作用于类类型运算对象时,可以通过运算符重载重新定义该运算符的含义。明智的使用运算符重载能令程序更加易于编写和阅读。 //2.重载的运算符是具有特殊名字的函数,它们由关键字operator和其后要定义的运算符号共同组成。和其它函数一样,重载的运算符也包含返回类型,参数列表以及函数体。 //3.除了重载函数调用符之外,其余的重载运算符不能含有默认实参。 //4.如果运算符函数是... 阅读全文