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

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

2012-02-27 
关于定位new表达式的问题const int size 1class Foo{public:int val() {return _val}Foo() {_val 0

关于定位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可能用不了,
浪费内存了。

热点排行