关于定位new表达式的有关问题

关于定位new表达式的问题
const int size = 1;
class Foo
{
public:
int val() {return _val;}
Foo() {_val = 0;}
private:
int _val;
};

int main()
{
char * buff = new char[sizeof(Foo) * size];
Foo * pb = new (buff) Foo;
cout << pb->val();
delete [] buff;
return 0;
}
这个size如果改成别的数字例如16和1有什么区别?



------解决方案--------------------
有区别.这个size应该是指buff里可以存多少个Foo吧.
new (buff) Foo; 
不是普通的关键字new.它的意思是在buff这个内存位置
初始化一个Foo类对象.

当然,就这部分程序,size大于1没什么关系,只是有部分申请的内存没有用而已.
------解决方案--------------------
理论上没有区别,都是区开辟一块空间。
但是lz又没有注意到,底下有一个Foo * pb = new (buff) Foo;
就是在开辟的那块空间上去申请一个Foo大小的内存,如果把1改为16可能用不了,
浪费内存了。