上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 38 下一页
看起来不可能的事情在C++中总能找到解决的办法。正如,直接调用构造函数是不可能的,然而可以用placement new 欺骗编译器调用构造函数。--------------------------------------------------1、placement new 为何物?placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。void *operator new( size_t, void *p ) throw() { return p; Read More
posted @ 2011-02-18 15:00 BloodAndBone Views(1037) Comments(0) Diggs(0) Edit
C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。 对于 (1),上面提供的程序a可以证明了 delete[] 和 delete 是等同的。程序a:#include <stdio.h>#define BUFF_SIZE 10240int main(int argc, char *argv[]){ printf("Hello, world\n"; c Read More
posted @ 2011-02-18 14:27 BloodAndBone Views(138) Comments(0) Diggs(0) Edit
想弄懂这个问题,首先你要弄清楚数据的3种存储方式。1。静态区:全局变量。2。堆:程序执行是分配的内存3。栈:函数调用,局部变量。new出来的内存就是分配到堆上的。程序执行完以后,堆上分配的内存不会被操作系统自动回收,所以你不delete掉的话,操作系统不回收,那块内存就成了没爹没娘的无业有民了,这个就叫内存泄露。我这样说你应该知道为什么书上为什么说new和delete要成对出现了吧。分配出来的内存记得自己回收掉。静态区和栈上面分配的内存操作系统会自动回收。所以不用delete了。另外,我觉得你好像没有搞清楚new出来了什么东西,delete掉了什么东西。我给你举例子说。int * pt;//声 Read More
posted @ 2011-02-18 14:15 BloodAndBone Views(438) Comments(0) Diggs(0) Edit
new平常使用的new都是new operator(new操作符),它是语言内置的,无法重载。new的第一种写法://callnewoperatorint*p=newint(3);调用new operator后做了两件事:1、调用operator new分配内存。2、调用构造函数初始化对象。operator new声明如下://operatornew'sdeclarationvoid*operatornew(size_tsize);它可以被重载,但是第一个参数类型必须是size_t, 决定分配内存的大小。可以调用operator new只进行内存分配://calloperatornewvoid Read More
posted @ 2011-02-18 14:14 BloodAndBone Views(310) Comments(0) Diggs(0) Edit
一般来说new和delete要成对出现,在使用完new申请的内存后要马上释放。我相信持这种说法的人不止我们老师一个人,养成良好的内存使用习惯固然重要,但如果因此就认为new和delete必须成对出现,使用完new得到的空间后就要马上用delete释放的话,就有点“大材小用”了,相信C++提供这一由用户控制的内存控制方法也不是只限于如此的使用方法。正确灵活的,或许也是“高级”的使用方法,是在A处使用new申请一块内存,用一个指针指pA向它,之后在B处用指针pB指向pA所指向的空间,释放指针pA本身,接着释放pB所指向的内存空间,最后释放指针pB本身 Read More
posted @ 2011-02-18 14:13 BloodAndBone Views(249) Comments(0) Diggs(0) Edit
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 38 下一页