C++ Primer(P347):定位new操作符用法?

lieyu063 2004-05-05 08:18:30
#include<iostream>
#include<new>
using namespace std;
const int chunk=16;

class TFoo
{
public:
int val(){return _val;};
TFoo(){_val=1;};
private:
int _val;
};

//预分配内存,但没有TFoo对象
char *buf=new char[sizeof(TFoo)*chunk];//这里用int等类型,不影响结果。为什么?
int main()
{
//在buf中创建一个TFoo对象
TFoo *pb=new(buf) TFoo;

//检查一个对象是否被放在buf中
if(pb->val()==1)
cout<<"new expression worked!"<<endl;
delete[] buf;
return 0;
}
上面已经有一个问题了,还有,有谁知道定位new操作符有咱们什么实际的用途啊?
...全文
35 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
古布 2004-05-06
char *buf=new char[sizeof(TFoo)*chunk];这个随便开辟,
TFoo *pb=new(buf) TFoo;// 这里会调用默认的ctor
  • 打赏
  • 举报
回复
fflush 2004-05-06
char *buf=new char[sizeof(TFoo)*chunk];//这里用int等类型,不影响结果。为什么?
因为我们需要的只是一段存储空间,并不关心它是如何被解释的
谁知道定位new操作符有咱们什么实际的用途啊?
其实你上面的代码就是一个应用,它可以用来定义你自己的new操作符。这样你可以非常高效的用你自己的new来为你的自定义类分配空间
  • 打赏
  • 举报
回复
runall 2004-05-06
首先在类TFoo中因为只有一个int型成员变量因此sizeof(TFoo)与sizeof(int)是相同的。
定位new操作符可以用在类没有提供缺省的构造函数时,而你需要声明一个对象数组,就可以先预分配内存而不调用构造函数,然后使用定位new操作符来在调用构造函数把对象分配在前面预分配的内存中,详情见《More Effective C++》条款4
  • 打赏
  • 举报
回复
新自由呼吸 2004-05-06
用到时才分配内存空间,不象静态的,一开始就分配好了
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-05-05 08:18
社区公告
暂无公告