placement new的问题
anank 2007-05-03 10:37:12 关于 placement new 的问题:
----------------
在网上找了很多关于placement new的介绍,有很多都是这样说的;
引用:
使用方法
第一步 缓存提前分配
class Task {/*..*/};
char * buff = new [sizeof(Task)]; //分配内存
第二步:对象的分配
Task *ptask = new(buff) Task
第三步:使用
ptask->suspend();
第四步:对象的毁灭
ptask->~Task(); //调用外在的析构函数
第五步:释放
你可以反复利用缓存并给它分配一个新的对象(重复步骤2,3,4)如果你不打算再次使用这个缓存,你可以象这样释放它
delete [] buff;
跳过任何步骤就可能导致运行时间的崩溃,内存泄露,以及其它的意想不到的情况。如果你确实需要使用placement new,请认真遵循以上的步骤。
---------
问题:
1> 第一步改成这样行不行?
char *buff = operator new [sizeof(Task)] ; // 用operator 来分配空间,不作初始化
2> 还有一些参考资料上说placement new和内存对齐的关系比较大,如果使用不档,会造成大的问题。内存对齐我是知道的,但是请问会造成什么问题?(举个简单例子看看)应该怎么避免(或者解决)这样的问题??