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类型,没有构造函数.
C/C++ code
new S;//只分配空间
new S(); //分配空间后,把每个成员初始化为默认值(int-〉0, bool->false等)