首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 解惑

2012-10-21 
在线等 C++ 解惑#include stdafx.h#include iostreamusing namespace stdstruct S{void *operator ne

在线等 C++ 解惑
#include "stdafx.h"
 #include <iostream>
 using namespace std;
 struct S{
 void *operator new(unsigned int size,void *p,int i)
 {
 ((S*)p)->i = i;
 return p;
 }
 int i;
 };
 S ss;
 S *pss = new(&ss,10)S();
 
 int main()
 {
 cout << ss.i << " " << pss->i << endl;
 S *pss2 = new(&ss,20)S();//加了()就是0,不加就是20 为什么?
 cout << ss.i << " " << pss2->i << endl;
 getchar();
 return 0;
 }
问题:
在S *pss = new(&ss,10)S();
和S *pss2 = new(&ss,20)S();
这两句中,如果S后面不加()则就是穿进去的数字,但加了后就是0了。但是但不调试时发现确实进了new函数,i的值也改变了,但执行完后,如果加了(),i又变成0了

在线等,一直没搞懂S后加()和不加的区别!
谢谢!

[解决办法]
使用 () 形式的初始值设定项构造的 POD 类型的对象将被默认初始化
[解决办法]
operator new() 是内存分配函数, 在里面修改这段内存是没有意义的.

后面的 S 不加括号时,该对象会被默认初始化,其值不确定, 不可以读!
加括号时, 该对象会被 0 初始化. 里面的i 被初始化为0 .
[解决办法]
好问题! 对于POD类型,没有构造函数.

C/C++ code
new S;//只分配空间new S(); //分配空间后,把每个成员初始化为默认值(int-〉0, bool->false等) 

热点排行