Effective C++
生无涯
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
条款1:尽量用const和inline而不用#define
一 Shifting from c to c++条款1:尽量用const和inline而不用#define也称为:尽量用编译器而不用预处理。原因:(1)#define ASPECT_RATIO 1.653 编译前预处理程序会将ASPECT_RATIO 替换为1.653,编译出错时只会指出1.653,而无法跟踪ASPECT_RATIO,不便于调试(2)#define max(a,原创 2011-06-30 11:13:00 · 1000 阅读 · 0 评论 -
条款3:尽量用new和delete而不用malloc和free
malloc和free(及其变体)会产生问题的原因在于它们太简单:他们不知道构造函数和析构函数。假设用两种方法给一个包含10个string对象的数组分配空间,一个用malloc,另一个用new:string *stringarray1 =static_cast(malloc(10 * sizeof(string))); string *stringarray2 = new st原创 2011-06-30 12:17:00 · 534 阅读 · 0 评论 -
条款6:析构函数里对指针成员调用delete
大多数情况下,执行动态内存分配的的类都在构造函数里用new分配内存,然后在析构函数里用delete释放内存。增加一个指针成员意味着几乎都要进行下面的工作: ·在每个构造函数里对指针进行初始化。对于一些构造函数,如果没有内存要分配给指针的话,指针要被初始化为0(即空指针)。 ·删除现有的内存,通过赋值操作符分配给指针新的内存。 ·在析构函数里删除指针。如果在构造函数里忘了初始化原创 2011-06-30 17:17:00 · 968 阅读 · 0 评论 -
条款4:尽量使用c++风格的注释
即尽量用// 而不是/* */旧的c注释语法在c++里还可以用,c++新发明的行尾注释语法也有其过人之处。例如下面这种情形: if ( a > b ) { // int temp = a; // swap a and b // a = b; // b = temp;}用c++形式的句法来注释掉这个程序块时,嵌在里面的原创 2011-06-30 12:24:00 · 508 阅读 · 0 评论 -
条款2:尽量用iostream而不用stdio.h
一 Shifting from c to c++条款2:尽量用而不用scanf和printf及其系列的缺点:(1)他们不是类型安全的(2)没有扩展性(3)scanf/printf系列函数把要读写的变量和控制读写格式的信息分开来---------------------------------------------------------------------sc原创 2011-06-30 11:42:00 · 815 阅读 · 0 评论 -
条款5:对应的new和delete要采用相同的形式
下面的语句有什么错? string *stringarray = new string[100];...delete stringarray;一切好象都井然有序——一个new对应着一个delete——然而却隐藏着很大的错误:程序的运行情况将是不可预测的。至少,stringarray指向的100个string对象中的99个不会被正确地摧毁,因为他们的析构函数永远不会被调用。用ne原创 2011-06-30 12:46:00 · 527 阅读 · 0 评论
分享