C++ 解惑
在线等 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类型,没有构造函数.
#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等)