《高质量程序设计指南》-------new三种使用方式

《高质量程序设计指南C/C++语言》笔记总结 在对林锐,韩永泉编著的《高质量程序设计指南C/C++语言》的学习中,我从中了解到了很多编程的小细节和重要的概念,特总结规整如下: 1.标准C语言允许任何非void类型的指针和void类型的指针之间进行直接的相互转换。但在C++中,可以把任何类型的指针直接指派给void类型指针,因为void*是一种通用指针;但是不能反过来将void类型指针直接指派给任何非void类型的指针,除非进行强制转换。因此 阅读详情

new有三种使用方式:plain new、nothrow new、placement new.

1.plain new/delete.普通的new

 

定义如下:

  void *operator new(std::size_t) throw(std::bad_alloc);

  void operator delete(void*) throw();

注:标准C++ plain new失败后抛出标准异常std::bad_alloc而非返回NULL,因此检查返回值是否为NULL判断分配是否成功是徒劳的。

测试程序:

#include "stdafx.h"
#include <iostream>
using namespace std;

char *GetMemory(unsigned long size)
{
 char *p=new char[size];//分配失败,不是返回NULL
 return p;
}

int main()
{
 try
 {
  char *p=GetMemory(10e11);// 分配失败抛出异常std::bad_alloc
  //...........
  if(!p)//徒劳
   cout<<"failure"<<endl;
  delete [] p;

 }
 catch(const std::bad_alloc &ex)
 {
  cout<<ex.what()<<endl;
 }
   
    return 0;
}

 

2.nothrow new/delete不抛出异常的运算符new的形式,new失败时返回NULL。

 

定义如下:

     void *operator new(std::size_t,const std::nothrow_t&) throw();

     void operator delete(void*) throw();

    struct nothrow_t{};  const nothrow_t nothrow;//nothrow作为new的标志性哑元

测试程序:

#include "stdafx.h"
#include <iostream>
#
include <new>
using namespace std;

char *GetMemory(unsigned long size)
{
 char *p=new(nothrow) char[size];//分配失败,是返回NULL
 if(NULL==p)
  cout<<"alloc failure!"<<endl;
 return p;
}

int main()
{
 try
 {
  char *p=GetMemory(10e11);
  //...........
  if(p==NULL)
   cout<<"failure"<<endl;
  delete [] p;

 }
 catch(const std::bad_alloc &ex)
 {
  cout<<ex.what()<<endl;
 }
   
    return 0;
}


3.placement new/delete 主要用途是:反复使用一块较大的动态分配成功的内存来构造不同类型的对象或者它们的数组。例如可以先申请一个足够大的字符数组,然后当需要时在它上面构造不同类型的对象或数组。placement new不用担心内存分配失败,因为它根本不分配内存,它只是调用对象的构造函数。

 

测试程序:

#include "stdafx.h"
#include <iostream>
#include <new>
using namespace std;

class ADT
{
 int i;
 int j;
public:
 ADT()
 {
 }
 ~ADT()
 {
 }
};

int main()
{
 char *p=new(nothrow) char[sizeof(ADT)+2];
 if(p==NULL)
  cout<<"failure"<<endl;

 ADT *q=new(p) ADT;  //placement new:不必担心失败
// delete q;//
错误!不能在此处调用delete q;
 q->ADT::~ADT();//显示调用析构函数
 delete []p;
    return 0;
}

注:使用placement new构造起来的对象或数组,要显式调用它们的析构函数来销毁(析构函数并不释放对象的内存),千万不要使用delete.这是因为placement new构造起来的对象或数组大小并不一定等于原来分配的内存大小,使用delete会造成内存泄漏或者之后释放内存时出现运行时错误。

 

五、e2studio VS STM32CubeIDE之汉化 介绍stm32cubeide汉化方案和汉化包e2studio自带汉化包,在安装过程中可选择安装e2studio STM32CubeIDE切换中英文。 阅读详情

相关推荐

实战演练:用wvp-GB28181-pro + ZLMediaKit搭建一个可用的国标视频监控测试环境(附设备模拟器对接)

本文详细介绍了如何使用wvp-GB28181-pro和ZLMediaKit在Ubuntu系统上搭建GB28181视频监控测试环境。从环境准备、组件解析到核心服务部署与设备模拟器对接,提供完整的实战指南,帮助开发者快速构建可验证的监控系统。

weixin_42692935的博客 580

C++ new的nothrow关键字和new_handler用法

<br />今天和同事review代码时,发现这样的一段代码:<br /> <br />Manager * pManager = new Manager();<br />if(NULL == pManager)<br />{<br />    //记录日志<br />    return false;<br />}<br /> <br />然后,一个同事就说这样写欠妥,应该改为:<br /> <br />Manager * pManager = NULL;<br />try<br />{<br />   

星空漫野 1万+

Linux环境下使用线程方式操作UART读写功能

本文介绍Linux环境下使用线程方式操作UART的方法,实现了串口打开,关闭,发送数据,接收数据功能,还编写测试代码,验证该功能。

mftang的博客 2079

【理论实践】new的三种用法:plain new,nothrow new和placement new

一、plain new就是最普通的new的,动态创建一个对象或数组,基本用法如下: class A { int m_v; public: A() {} A(int v) : m_v(v) {} A(double v) : m_v(ceil(v)) {} }; A* p1 = new A; /

jlusuoya的博客 1011

如何在软件复位后保留指定RAM区域的数据

本文主要介绍S32K144的RAM retention功能

北极熊的脖子(16605192620@163.com) 1万+

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

weixin_55249340的博客 3万+

new和new (std::nothrow) 的区别

源码方面的信息就不详细讲述了,找找代码看看便知,简要说明下: new(std::nothrow) 顾名思义,即不抛出异常,当new一个对象失败时,默认设置该对象为NULL,这样可以方便的通过if(p == NULL) 来判断new操作是否成功 普通的new操作,如果分配内存失败则会抛出异常,虽然后面一般也会写上if(p == NULL) 但是实际上是自欺欺人,因为如果分配成功,p肯定不为NULL;...

PiccoloYang的博客 606

windows中如何将已安装的nodejs高版本降级为低版本

第一步:先清空本地安装的node.js版本 1.按健win+R弹出窗口,键盘输入cmd,然后敲回车(或者鼠标直接点击电脑左面最左下角的win窗口图标弹出,输入cmd再点击回车键) 然后进入命令控制行窗口,并输入where node查看之前本地安装的node的路径 2.找到上面找到的路径,将node.exe所在的父目录里面的所有东西都删除 3.为了彻底删除之前安装的node.js,鼠标点击电脑左面最左下角的win窗口图标弹出,输入“控制面板”再点击回车键进入,进入控制面板后,找到所安装的node.js并

weixin_44582077的博客 9万+

new (nothrow) T() 的原理

查看中对new的声明. void* operator new(std::size_t) throw (std::bad_alloc); void* operator new(std::size_t, const std::nothrow_t&) throw(); void* operator new[](std::size_t) throw (std::bad_alloc); void*

噬日者 5244

Ubuntu下用QEMU模拟运行OpenBMC

在调试过程中,安装了很多依赖库,具体没有记录。关于kvm,也没理清具体有什么作用。本文仅记录,用QEMU成功的将OpenBMC跑起来的过程,做备忘,也供大家参考。

Sunny的博客 1205

SmartFusion从FPGA到ARM(九)——串口命令解析器的实现

系列教程:SmartFusion从FPGA到ARM系列教程 前面两节介绍了MSS_UART和CoreUARTapb的使用: MSS_UART的使用 CoreUARTapb的使用 MSS_UART和CoreUARTapb都支持中断和轮询方式获取串口接收的数据,对于串口中断服务函数,有时我们需要通过不同的串口指令去执行不同的动作,下面以CoreUARTapb为例,来实现一个简单的串口命令解析器。固定串口数据帧格式,帧长度不定。 串口数据帧格式:* + 数据 + #,对于数据中为参数的,可以自定义处理函数。例

whik1194的博客 1535

new && new(std::nothrow)

new && new(std::nothrow)   转载▼ 源码方面的信息就不详细讲述了,找找代码看看便知,简要说明下: new(std::nothrow) 顾名思义,即不抛出异常,当new一个对象失败时,默认设置该对象为NULL,这样可以方便的通过if(p == NULL) 来判断new操作是否成功 普通的new操作,如果分配内存失败则会抛出异常,虽然后面一般也会写上

u012861978的专栏 738

自建 HTML获取腾讯六宫格点选图片验证码素材,实现刷新批量获取图片方便训练

通过自建 HTML 页面,可以方便地获取腾讯六宫格二维码素材,不仅过程简单,而且可以灵活配置各种参数。希望这篇文章能帮助到需要相关素材的小伙伴。如果你有其他问题或者更好的方法,欢迎留言交流!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 488

《高质量程序设计指南》C++题目

《高质量程序设计指南》C++题目    今天晚上下了本《高质量程序设计指南》,据说那几个题目 20个硕士里面,得50分以上的还没有超过一半。如果能得满分, 林锐博士拜你为师。我就很感兴趣的去做了一下,发现都很基本。我这个半路出家的人,居然也能做个80分。给了自己很大的信心,同时, 也觉得很多问题,还是平时很爱犯的错误。今天把我的错误贴出来和大家...

weixin_37586145的博客 195

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

高质量程序设计指南:C++/C语言

《高质量程序设计指南:C++/C语言》基本信息作者: 林锐 韩永泉 [作译者介绍]出版社:电子工业出版社ISBN:9787121186172上架时间:2012-10-24出版日期:2012 年10月开本:16开页码:412版次:1-1所属分类: 计算机 &gt; 软件与程序设计 &gt; C/Turbo C &gt; C计算机 &gt; 软件与程序设计 &gt; C++ &gt; C++更多关于 ...

weixin_33724059的博客 1054

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

高质量程序设计指南

高质量程序设计指南 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一本关于程序设计的高质量指南的PDF版本,主要面向使用C/C++语言的开发者。这份指南深入浅出地讲解了程序设计中的最佳实践,帮助开发者写出更高效、更可靠的代码。 内容概述 编程基础 代码风格与规范 数据结构与算法 设计模式 性能优化 调试与测试 使用说明 如有需要,请自行下载该PDF文件,并...

gitblog_06703的博客 405

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

林锐《高质量程序设计指南C/C++》笔记02:断言、数组访问、位域、条件编译

如果表达式的值为0(假),则输出错误信息,调用abort()终止程序;如果表达式为真,则不进行任何操作。本篇主要集中在介绍C/C++中的指针、数组和字符串,以及数据结构和预处理技术,在下一篇会开始介绍C++面向对象的程序设计方法。C++断言(assert)断言是什么断言(assert)及其作用二维数组的首地址、首行地址和元素地址C语言学习之:一维数组、二维数组的取值和取地址问题关于二维数组a[i][j]为什么C语言中*(a+i)+j能表示a[i][j]的地址C语言位域(位段)详解C 位域。

Chiang11的博客 591

《高质量程序设计指南——C++/C》(第三版)

我的《高质量程序设计指南——C++/C》(第三版)即将出版,欢迎关注。请在这里和作者进行交流,或者通过email: northwest_wolf@sina.com 。

春风化雪的专栏 4536

《高质量程序设计指南——C++/C》重印啦!

《高质量程序设计指南——C++/C》第二次印刷2000册,修改了到2008.1.1为止已经发现的各个错误,包括排版问题。非常感谢热心的网友来信和我讨论各种程序设计问题,也感谢所有关注本书的网友们。谢谢!继续期待大家来信和我探讨问题。

春风化雪的专栏 2865

高质量程序设计指南C/C++语言第三版 PDF 高清版

高质量程序设计指南C/C++语言第三版 PDF 高清版 【下载地址】高质量程序设计指南CC语言第三版PDF高清版 本仓库提供《高质量程序设计指南C/C++语言第三版》PDF高清版资源,内容详实,结构清晰,适合各层次程序员。书中不仅涵盖C/C++基础语法、面向对象编程、模板等核心知识,还通过大量实例帮助读者深入理解并应用所...

gitblog_06787的博客 498

高质量的程序设计

 高质量的程序设计遵循以下几个条件:1、最小的复杂度:避免做出“聪明”的设计,因该作出简单和易于理解的设计。2、易于维护:只要你为将来的维护人员找想。不要只顾及到短期的效果。3、松散耦合:让各个类、各个模块之间的关联最少。4、可扩展性:增强系统功能时,其他的部分不会受到影响。5、可重用性:系统中的某一个部分能反复的重复使用。6、高扇入:大量的类实用某个指定的较低层次上的工具

NonShadow 1906

【一】《高质量程序设计指南》阅读(第1章---高质量软件开发之道)

经鹏哥推荐,在图书馆找《高质量的C/C++编程》没有找到,后在网上发现另一个名字《高质量程序设计指南》,于是终于找到了。我看的这本是第三版,本书一共397页,共分为17大章。本次系列包含我私自认为书中比较实用且重要的内容和操作展示。

2403_86782268的博客 832

《高质量程序设计指南》试读

  这几天在iteye上看到试读活动,发现《高质量程序设计指南》这本书赫然在列。我曾经读过林锐的Java版《高质量程序设计指南》,虽然比不上《Effective Java》,也算是一本可读的Java技巧书。而C/C++版的《高质量程序设计指南》则是作者成名之作,这次居然时隔多年更新到了第三版,真是没有想到。   不过下载样张阅读后,感觉这本书实在没有买的价值。样张一共提供了1、3、8这三章。...

魔力猫咪 303

《高质量程序设计指南:C++/C语言》图书信息

《高质量程序设计指南:C++/C语言》(林锐名作,前版曾广泛流传,被大量IT企业采用为面试题)  林锐,韩永泉编著 ISBN 978-7-121-18617-2 2012年10月出版 定价:65.00元 412页 16开   编辑推荐 《大学十年》感染一代IT人,林锐亲述多年一线经验。 本书提供内建高质量代码必须熟练掌握的编程技术与规范。 “高质量”试...

iteye_15786的博客 176

《高质量程序设计指南——C++/C》第三版勘误

《高质量程序设计指南——C++/C》第三版勘误 1.Page IX:1.5 “关于软件开发。。。”存在印刷问题;2.Page 7:倒数第13行,“啰里啰唆”印刷有问题;3.Page 15: 表1-2有些许印刷问题;4.Page 58: 示例4-6,代码用下列代码替换: class Ba

网络空间安全与企业信息化 1391

高质量程序设计指南--C++/C语言(第3版)

高质量程序设计指南--C++/C语言(第3版) 【下载地址】高质量程序设计指南--CC语言第3版 《高质量程序设计指南--C++/C语言(第3版)》是一本深入探讨C++和C语言编程技巧与规范的经典书籍。作者林锐通过丰富的实例和详尽的讲解,帮助读者掌握高质量编程的核心要点。本书不仅涵盖了编程规范、代码质量、调试与优化等关键...

gitblog_06704的博客 305
上一篇: ASCII 表(0~255)
下一篇: Web 架构师的能力
UU_Yang
博客等级 码龄23年 926粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值