2013年4月18日

摘要: 1、构造函数不可以是虚函数2、析构函数可以是纯虚函数 在某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。 class awov { public: virtual ~awov() = 0; // 声明一个纯虚析构函数 }; 这个类有一个纯虚函数,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。但这里还有一件事... 阅读全文
posted @ 2013-04-18 15:45 江在路上 阅读(512) 评论(0) 推荐(0) 编辑
 
摘要: 1、定义一个宏:交换两个变量的值,不使用第三个变量(1)算数方法a = a + b;b = a - b;a = a - b;(2)异或方法a = a^b; //只能对int,char..b = a^b;a = a^b;2、进程和线程的区别。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分 阅读全文
posted @ 2013-04-18 15:38 江在路上 阅读(104) 评论(0) 推荐(0) 编辑
 
摘要: 今天在网上看到了这样一个问题,“如果malloc 了一块字符串的内存,然后,它改变了这个字符串的大小,问会不会有一部分内存没有被释放掉。”这个问题,以前的确没有仔细想过。 当然,我觉得是肯定会释放掉的,但是一直没有了解过free 的原理,不敢乱说。我看了一下操作系统的内存管理,基本上是这样的,当然各个系统的实现不一样。 操作系统管理内存,维护了一个空闲内存链表,malloc从个链表中选出一个来使用,每个内存块都有一个头部来表示这个内存的基本信息,如内存大小, 所以free 时候 能够记住原来指针所指的内存大小,而不是用内存块中是否有 \0 来临时计算指向内存的大小,不要字符串的计算... 阅读全文
posted @ 2013-04-18 14:25 江在路上 阅读(194) 评论(0) 推荐(0) 编辑
 
摘要: 一、定义 “野指针”不是NULL指针,是指向“垃圾”内存(不可用内存)的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if无法判断一个指针是正常指针还是“野指针”。有个良好的编程习惯是避免“野指针”的唯一方法。二、成因 1、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 2、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字(尤其是... 阅读全文
posted @ 2013-04-18 14:21 江在路上 阅读(214) 评论(0) 推荐(0) 编辑
 
摘要: 1、数组名和指针#include<stdio.h>void fun(char str[100]){ printf("%d\n", sizeof(str)); //4,当数组作为函数的形参时,退化为指针 }int main(void){ char str[] = "Hello"; char *p = str; printf("%d\n", sizeof(str)); //6,别忘了最后的'\0' printf("%d\n", sizeof(p)); //4 fun(str); return 阅读全文
posted @ 2013-04-18 13:05 江在路上 阅读(88) 评论(0) 推荐(0) 编辑