![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 417 阅读 · 0 评论 -
条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
存在的问题 Memory leak 现在a和b包含的指针指向同一个字符串,那么只要其中一个离开了它的生存空间,其析构函数就会删除内存,而此内存正在被另一个指针所指(pointer aliasing问题) 注意:By value的参数和返回值都会调用copy constructor原创 2012-08-20 19:19:38 · 572 阅读 · 0 评论 -
条款1:尽量用const和inline而不用#define
如果改成“尽量用编译器取代预处理器”会更好些 用const 不用#define的原因 因为#define的名称不会出现在符号表中,所以会给调试带来麻烦,你可能会遇到一个数字却不知道从何而来。 Const有很多其他用法: 定义常量指针: const char * const authorName = “Scotter Mayers”; 定义class专属的常量: class GameP原创 2012-08-20 08:34:35 · 602 阅读 · 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 · 673 阅读 · 0 评论 -
条款3:尽量用new和delete而不用malloc和free
New 包括两个过程: 分配内存 Constructor delete 包括两个过程: Deconstructor 释放内存 例如: string *stringarray1 = static_cast(malloc(10 * sizeof(string))); //只是申请了可以容纳10个string对象的足够空间, //但内存里并没有创建这些对象 string *st原创 2012-08-20 08:42:34 · 598 阅读 · 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 · 455 阅读 · 0 评论