问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于c++中new语句的使用方法~~

发布网友 发布时间:2022-04-07 23:10

我来回答

5个回答

热心网友 时间:2022-04-08 00:39

new有三种使用方式:plain new,nothrow new和placement new。

(1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在C++中是这样定义的:
void* operator new(std::size_t) throw(std::bad_alloc);
void operator delete(void *) throw();

提示:plain new在分配失败的情况下,抛出异常std::bad_alloc而不是返回NULL,因此通过判断返回值是否为NULL是徒劳的。
(2)nothrow new是不抛出异常的运算符new的形式。nothrow new在失败时,返回NULL。定义如下:
void * operator new(std::size_t,const std::nothrow_t&) throw();
void operator delete(void*) throw();
(3)placement new意即“放置”,这种new允许在一块已经分配成功的内存上重新构造对象或对象数组。placement new不用担心内存分配失败,因为它根本不分配内存,它做的唯一一件事情就是调用对象的构造函数。定义如下:
void* operator new(size_t,void*);
void operator delete(void*,void*);

提示1:palcement new的主要用途就是反复使用一块较大的动态分配的内存来构造不同类型的对象或者他们的数组。

提示2:placement new构造起来的对象或其数组,要显示的调用他们的析构函数来销毁,千万不要使用delete。

char* p = new(nothrow) char[100];
long *q1 = new(p) long(100);
int *q2 = new(p) int[100/sizeof(int)];

热心网友 时间:2022-04-08 01:57

可以的,new int[5] 和new int [5]没有区别的! 这个不是属于语法的东西,属于个人编程习惯和格式,看个人的习惯吧!

热心网友 时间:2022-04-08 03:32

3: int *p=new int [10];
004010E8 6A 28 push 28h//内存的大小10*4
004010EA E8 21 00 00 00 call operator new (00401110)
004010EF 83 C4 04 add esp,4

00401110 55 push ebp
00401111 8B EC mov ebp,esp
00401113 51 push ecx
00401114 6A 01 push 1//_nh_malloc参数2
00401116 8B 45 08 mov eax,dword ptr [cb]
00401119 50 push eax//_nh_malloc参数1
0040111A E8 E1 3B 00 00 call _nh_malloc (00404d00)//调用_nh_malloc申请内存
0040111F 83 C4 08 add esp,8
00401122 89 45 FC mov dword ptr [res],eax//把_nh_malloc的返回值给[res]
00401125 8B 45 FC mov eax,dword ptr [res]//返回申请内存的指针
00401128 8B E5 mov esp,ebp
0040112A 5D pop ebp
0040112B C3 ret//返回

调用过程可以看成这样:
new[4*10]->_nh_malloc(40, 1)->返回申请的指针

res这个是VC6.0反汇编后给出的变量名,其实它是一个局部变量
push ecx //这句就是申请res的内存的 相当sub esp, 4

00401122 89 45 FC mov dword ptr [res],eax//把_nh_malloc的返回值给[res]
00401125 8B 45 FC mov eax,dword ptr [res]//返回申请内存的指针
为什么会产生产生上面的2句代码?
因为这个是调试模式的编译,代码没有优化,所以才会产生这样的问题
<mov dword ptr [res],eax> 等于 <res = _nh_malloc(...)>
<mov eax,dword ptr [res] 等于 <return res;> >

热心网友 时间:2022-04-08 05:23

double typename = new double

热心网友 时间:2022-04-08 07:31

写程序就是要不断尝试,试一试就清楚了,别嫌麻烦
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 请问美国国际钱币评级公司NGC,有人说其盒子里也装很多假银元,是这样吗? 签定评级过的纸币装在纪念册子里面为什么纸币还能那出来? 问一下NGC评级盒子不小心掉地上会损坏盒子和钱币吗? 诚鉴详评评的盒子币怎么样 ?可信不? 事业单位改制,会对在编人员怎样安置(我们是地质队) 事业单位改革后退休人员咋办? 事业单位改革后,哪几种事业身份以后将不存在? 事业单位改制后,40、50人群的工人身份编制安排有什么依据? 一个计算机必须装入什么设备才能运 行 世界上第一个计算机 苹果手机那个为你推荐明明图库里面有照片为什么显示没有? 如何组成一个计算机系统? 一个计算机操作系统通常应具有 一个计算机的网络组成包括哪几部分? 苹果手机相册为你推荐是自动的吗 家里跑进一只小老鼠,怎么抓呀 s7 v5.5能在win7 64位上安装吗 我也遇到同样的ansmpi.dll的问题,我下载你写上的DLL修复精灵,可是提示说从服务器下载失败,求帮助 高手帮我分析电脑问题 windows mpich2 怎样运行例子 社区服务站关于春季预防传染病知识讲座小结 传染病管理培训ppt课件 培训老师传染病预防的作用 塔罗牌 一张正义一张女祭司(逆)如何解读 沥青嵌缝油膏一立方米等于多少千克 如何算出1立方米沥青混合料里的材料用量 岩板市场的异常火红,岩板到底是什么? 蒙娜丽莎岩板5.5和8.5哪个好 洗米水可以浇栀子花吗? 都说岩板的性能很好,这是真的吗? 栀子花盆里可以撒大米吗 蒙娜丽莎瓷砖的岩板怎么样呀?值不值得买 栀子花浇什么水好呢?栀子花多久浇一次水呢? 想定制一款餐桌,用蒙娜丽莎瓷砖的岩板怎么样? 桅子花我浇了淘米水后花苞全脱落怎么办? 磊匠和蒙娜丽莎这两个牌子的岩板质量咋样 蒙娜丽莎瓷砖岩板怎样?有哪些特点? 怎么样跟客户谈蒙娜丽莎岩板的好处和用途 请问一下,蒙娜丽莎瓷砖的特色在哪里? 桅子花用淘米水能扦活可以吗?