提示: 作者被禁止或删除 内容自动屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
现在对那个 operator new 做一点简化,我自己弄了一下
这个 operator new的函数原型是 void *operator new(size_t); //这里改成 size_t size
这个size_t是 num*sizeof(type) 也就是分配多少内存空间
然后 内建 void * p = malloc(type); //type改成 size
然后返回 p; 至于那个 分配多少空间,确实是编译器自动计算的,这个可以查MSDN
在32位的计算机,在C++中,凡是指针类型都占4个字节,由于C++是强类型语言,我觉得编译器应该除了会检查地址大小,还会检查是什么类型,所以防止以下的蠢事; double *p = new int(0);//类型不兼容
所以大家不要吵了.
[此贴子已经被作者于2006-7-24 11:11:09编辑过]
热情依然:
呵呵,你也做了实验啊,我也做了的。
来说一下,new int;函数的确返回void*,但是编译器会因为new函数后面的int而把void*转换为int*.
我来说明理由:
要知道C++是不允许下面的操作的:
void*p=new int(5);
cout<<*p<<endl;//不允许对void类型输出。
然而你再换下看:
cout<<*(new int(5))<<endl;
这就很明显了。