随笔分类 - C++
摘要:在头文件中声明class 类 与 include类所在的头文件的理解:在头文件中,声明类它告诉编译器:存在这样的类。而实际的类则可以位于同一个编译单元中,也可以放在其他编译单元中。没有这个类原型,编译器将不会让我们编译通过。在头文件中引用 类所在的头文件,区别和结果:引用class声明和引用clas...
阅读全文
摘要:转自http://www.cnblogs.com/xiaoyusmile/archive/2012/06/27/2566049.htmlVS2010 有用的快捷键 : Ctrl + r, ctrl + w, 切换空格示。
阅读全文
摘要:1、当初始化 const member时2、当初始化reference menber 时 (引用成员变量)3、当调用一个base class的constructor,而它拥有一组参数时4、当调用一个member class 的constructor,而它拥有一组参数时
阅读全文
摘要:内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中...
阅读全文
摘要:发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。常见的内存错误及其对策如下:1、 内存分配未成功,却使用了它。编程新手常犯这种...
阅读全文
摘要:C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。 指针可以随时指向任意类型的内存块,它的特征是“可变...
阅读全文
摘要:如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么?voidGetMemory(char*p,intnum){p=(char*)malloc(sizeof(...
阅读全文
摘要:别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。用调试器跟踪示例7-5,发现指针p被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了“野指针”。如果此时不把p设置为NULL,会让人误以为p是个合法...
阅读全文
摘要:函数体内的局部变量在函数结束时自动消亡。很多人误以为示例7-6是正确的。理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋。这是错觉!voidFunc(void){char*p=(char*)malloc(100);//动态内存会自动释放吗?}我们发现指针有一些“似是而非”的特征:(...
阅读全文
摘要:“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。“野指针”的成因主要有两种:(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以...
阅读全文
摘要:malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/fr...
阅读全文
摘要:转自 http://www.cppblog.com/SmartPtr/archive/2007/07/05/27549.htmlauto_ptr解析auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能...
阅读全文
摘要:本地化设置需要具备三个条件:a. 语言代码 (Language Code)b. 国家代码 (Country Code) c. 编码(Encoding)本地名字可以用下面这些部分来构造:语言代码_国家代码.编码 比如(zh_CN.UTF-8, en_US等)locale的别名表见 /usr/lib/...
阅读全文
摘要:以下代码文件以CStdioFile向无法向文本中写入中文(用notepad.exe查看不到写入的中文)CStdioFile file;file.Open(…);file.WriteString(_T("abc你好"));//只能写入abc解决办法:使用setlocale语句设定区域#include...
阅读全文
摘要:1、一旦将某个成员函数声明为虚函数后,它在类的继承体系中就永远为虚函数了。2、如果基类定义了虚函数,当通过基类指针或引用调用派生类对象时,将访问到它们实际所指对象中的虚函数版本。3、只有通过基类对象的指针和引用访问派生类对象的虚函数时,才能体现虚函数的特性。4、派生类中的虚函数要保持其虚特征,必须与基类虚函数的函数原型完全相同,否则就是普通的重载函数,与基类的虚函数无关。5、派生类通过从基类继承的成员函数调用虚函数时,将访问到派生类中的版本。6、只有类的非静态成员函数才能被定义为虚函数,类的构造函数和静态成员函数不能定义为虚函数。原因是虚函数在继承层次结构中才能够发生作用,而构造函数、静态成员
阅读全文
摘要:虚析构函数!虚函数可以被派生类集成,并且要求派生类与基类中的虚函数具有相同的函数名和参数列表,但构造函数与析构函数的两个特征都与此相违背:1、构造函数与析构函数都不能被派生类继承。2、构造函数和析构函数与所在类同名,所以他们在派生类和基类中的名字并不相同。尽管如此,C++却允许析构函数定义为虚函数(...
阅读全文