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操作符有咱们什么实际的用途啊?
...全文
65 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
古布 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
  • 打赏
  • 举报
回复
用到时才分配内存空间,不象静态的,一开始就分配好了

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧