2009年12月19日

摘要: 何为placement new呢?placement new 是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。首先我们区分下几个容易混淆的关键词:new operator、operator new、placement new 。对于new operator,其实它是语言... 阅读全文
posted @ 2009-12-19 12:20 coolzgx 阅读(1239) 评论(1) 推荐(1) 编辑

2009年12月18日

摘要: 先看如下代码:[代码]输出结果为5跟9,有点超出自己的意料。本来a指定为const型,但用const_cast让非常量指针能够指向a的内存空间并可修改,断点查看时a的值也确实修改为9啦,那为什么输出的时候还是为5呢?百思不得其解,后来作为了一下反汇编后分析得到:原来虽然没使用优化,但系统还是对a这个const变量进行了预编译般的替换。所以即使原值其实已经改了,可是在输出时还是会自动替换为原值。这到... 阅读全文
posted @ 2009-12-18 22:56 coolzgx 阅读(344) 评论(6) 推荐(0) 编辑
摘要: 先看以下代码:{auto_prt<Circle> aCirCle(new Circle);}此时会发生内存泄露吗,并没有释放掉内存啊?其实不会的,当auto_ptr对象的生命周期结束后,会自动帮我们delete掉new的内存空间的。auto_ptr是RAII的一个应用,其对象最美妙之处在于如果它被声明为一个函数的局部变量,或作为函数的参数,甚至是一个静态对象,我们都可以保证其指向对象的... 阅读全文
posted @ 2009-12-18 00:28 coolzgx 阅读(198) 评论(0) 推荐(0) 编辑

2009年12月17日

摘要: 简单来说,一个进程就是一个正在执行程序的实例,它有存放程序正文和数据以及其他资源的地址空间。这些资源中包括打开的文件、子进程、即将发生的报警、信号处理程序、帐户信息等。而线程类似于一个迷你进程,线程是进程中活动的主体,之所以说它迷你,是因为它本身并不集中资源,一个进程中的所有资源被它的所有线程共享,它们具有共享同一个地址空间和所有可用数据的能力。可以想像一下,有这样一个工厂,里面有各种制造某种产品... 阅读全文
posted @ 2009-12-17 23:21 coolzgx 阅读(209) 评论(0) 推荐(0) 编辑

2009年12月16日

摘要: 今晚从《C++必知必会》上看到SFINAE这个C++的特性,也就是substitution failure is not an error,可惜怎么看都不能够理解。后来google了一下,参考了两篇文章,算是有点明白其中的微妙了吧。 我们都知道对于非模板函数的重载来说,无论是否被调用,或是无论调用点需要的是什么类型的重载,编译器会将所有参与了重载的函数一个不落的全部编译。而且这些函数的所有信息已... 阅读全文
posted @ 2009-12-16 11:39 coolzgx 阅读(574) 评论(0) 推荐(0) 编辑

导航