
effective c++笔记
yuanzhangmei1
这个作者很懒,什么都没留下…
展开
-
条款5:使用相同的形式的new和delete
string *stringarray = new string[100]; ... delete stringarray; 上面程序中的stringarray指向的100个string对象中的99个不会被正确地摧毁,因为他们的析构函数永远不会被调用原因:New和delete都同时做了两件事情如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就原创 2012-08-20 08:46:04 · 447 阅读 · 0 评论 -
条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
存在的问题Memory leak现在a和b包含的指针指向同一个字符串,那么只要其中一个离开了它的生存空间,其析构函数就会删除内存,而此内存正在被另一个指针所指(pointer aliasing问题)注意:By value的参数和返回值都会调用copy constructor原创 2012-08-20 19:19:38 · 618 阅读 · 0 评论 -
条款1:尽量用const和inline而不用#define
如果改成“尽量用编译器取代预处理器”会更好些用const 不用#define的原因因为#define的名称不会出现在符号表中,所以会给调试带来麻烦,你可能会遇到一个数字却不知道从何而来。Const有很多其他用法:定义常量指针: const char * const authorName = “Scotter Mayers”;定义class专属的常量: class GameP原创 2012-08-20 08:34:35 · 645 阅读 · 0 评论 -
条款2:尽量用<iostream>而不用<stdio.h>
scanf和printf不是类型安全的,而且没有扩展性,而类型安全和扩展性正是C++的基石,scanf/printf的这些弱点正是操作符>>和 int i; Rational r; // r 是个有理数 ... cin >> i >> r; //>>和 cout //编译器自己可以根据不同的变量类型选择操作符的不同形式>>和对于>>和但是原创 2012-08-20 08:40:12 · 721 阅读 · 0 评论 -
条款3:尽量用new和delete而不用malloc和free
New 包括两个过程:分配内存Constructordelete 包括两个过程:Deconstructor释放内存例如:string *stringarray1 = static_cast(malloc(10 * sizeof(string))); //只是申请了可以容纳10个string对象的足够空间, //但内存里并没有创建这些对象string *st原创 2012-08-20 08:42:34 · 623 阅读 · 0 评论 -
条款4:尽量使用c++风格的注释
用c++形式的句法来注释掉一个程序块时,嵌在里面的最初的注释不受影响:if ( a > b ) { // int temp = a; // swap a and b //a = b; //b = temp; } 但如果选择c风格的注释就会发生严重的错误:if ( a > b ) { /* int temp = a; /* swap a and b原创 2012-08-20 08:43:09 · 480 阅读 · 0 评论