
C++
有点冷
喜欢挑战,期待成长。
展开
-
C++返回局部变量的指针问题
#include int* zhizhen1(){ int* i = new int(1); return i;}int* zhizhen2(){ int* i; int c = 0; //临时变量被释放了 i = &c; return i;}int main(int argc, char **argv){ int *o1 = zhizhen1(); int *原创 2014-10-29 20:46:21 · 836 阅读 · 0 评论 -
Effective C++ 学习笔记11
条款11:为需要动态分配内存的类(含有指针的类)声明一个拷贝构造函数呃一个赋值操作符请注意下面这段代码:#include class String{public: String(const char* value) { if (value) { int length = strlen(value) + 1; data = new char[lengt原创 2015-02-16 17:07:02 · 518 阅读 · 0 评论 -
Effective C++ 学习笔记6
条款6:析构函数里对指针成员调用delete添加一个指针成员的流程:1.在构造函数中对指针进行初始化:对内存进行清0操作,然后通过赋值操作符分配新的内存(分配内存,或者赋值0);2.析构函数里头delete指针(空指针也可以直接delete)。如果在析构函数中没有删除指针,它不会表现出明显的症状,不断增长的内存泄露会最终侵蚀你的地址空间。原创 2015-02-13 17:25:26 · 488 阅读 · 0 评论 -
EffectiveC++ 学习笔记1
条款1:尽量使用const和inline而不用#define(尽量使用编译器而不是预处理,方便找错)需要注意的两点:1.定义指针常量的时候a.指针是常量的,要定义成constb.指针所指的类型要定义成const例如:const char* const authorName = "Scott Meyers";2.类中的常量(静态的类常量成员变量)原创 2015-02-13 12:12:53 · 467 阅读 · 0 评论 -
Effective C++ 学习笔记2
条款2:尽量用而不是注意:这里说的是而不是,两者区别:处于std名空间之下,而处在全局空间下,容易造成名字冲突。1.scanf/printf 的缺陷 1)scanf/printf很轻巧、高效,但是他们不是类型安全的,而且也没有扩展性; 2)scanf/printf需要把变量和控制格式区分开来。它们的弱项正是>>和1)通过运算符函数重载可以处理自定义类原创 2015-02-13 15:08:31 · 465 阅读 · 0 评论 -
Effective C++ 学习笔记5
条款5:对应的new和delete要采用相同的形式看下面例子:string* Arr = new string[100];.....delete Arr;这样做的话,Arr[100]指向的至少99个对象没有被成功释放,因为析构函数没有被成功的调用。正确做法是:delete[] Arr;如果没有正确使用相同的形式,结果是不可预测的。使用typedef的同学需要注意下,原创 2015-02-13 16:49:03 · 427 阅读 · 0 评论 -
Effect C++ 学习笔记4
条款4:尽量使用C++风格的注释第一部分:关于两种注释1.C语言的注释很容易产生错误例如:if(a > b){ /* swap(a, b); /*交换A和B的位置*/ */}这样会使注释提前结束。2.有些老的专门为C语言设计的预处理程序,可能不知道C++风格的注释例如:#define Pi 3.1415926 //圆周率//后原创 2015-02-13 16:14:35 · 616 阅读 · 0 评论 -
Effective C++ 学习笔记14
条款14:确定基类有虚析构函数我们可以用静态数据成员和静态函数来处理一个类所拥有的对象数。例如:#include class EnemyTarget {public: EnemyTarget() //初始化方式1 { ++numTargets; } EnemyTarget(const EnemyTarget&) //初始化方式2 { ++numTa原创 2015-02-17 12:35:18 · 461 阅读 · 0 评论 -
Effect C++ 学习笔记3
条款3:尽量使用new和delete而不用malloc和free原因很简单:malloc和free是C语言的产物,它们并不知道构造函数和析构函数。例子:1.Arr1中有足够10个string对象存放的空间,但是内存里面并没有创建完整的string对象。 string *Arr1 = static_cast(malloc(10 * sizeof(string)));原创 2015-02-13 15:41:35 · 515 阅读 · 0 评论 -
浅谈C++中指针和引用的区别
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。1.指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;转载 2014-11-18 09:42:40 · 510 阅读 · 0 评论 -
C/C++编译过程
C/C++编译过程 C/C++编译过程主要分为4个过程 1) 编译预处理 2) 编译、优化阶段 3) 汇编过程 4) 链接程序 一、编译预处理 (1)宏定义指令,如#define Name TokenString,#undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,转载 2014-11-18 09:50:23 · 591 阅读 · 0 评论