new与delete正确用法

2023-05-16

说明:推荐使用如下宏,可以在一定程度上避免使用空指针,野指针的问题。
#define HW_NEW(var, classname) \
    do { \
    try \
{ \
    var = new classname; \
} \
    catch (...) \
{ \
    var = NULL; \
} \
    break; \
    } while(0)

//(1) 该宏会将var置为NULL, 所以调用该宏之后, 不再需要置var为NULL
//(2) HW_DELETE宏与NEW对应, 用来释放由HW_NEW分配的对象
//    注意: 如果以数组方式分配对象(见对HW_NEW的描述), 则必须使用宏HW_DELETE_A
//    来释放, 否则可能导致问题,参见:规则6.3
#define HW_DELETE(var) \
    do \
{ \
    if (var != NULL) \
{ \
    delete var; \
    var = NULL; \
} \
    break; \
} while(NULL == var)

//(1) 这个宏用来删除一个由HW_NEW分配的数组, 删除之后也会将var置为NULL
#define HW_DELETE_A(var) \
    do \
{ \
    if (var != NULL) \
{ \
    delete []var; \
    var = NULL; \
} \
    break; \
} while(NULL == var)
直接使用HW_DELETE,HW_DELETE_A宏来释放指针内存空间,就不会出现遗忘将指针置为NULL了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

new与delete正确用法 的相关文章

  • Java—内部类

    It s possible to please a class definition within another class definition 内部类即定义在另一个类的内部的类 When you create an inner cla
  • 通过修改注册表设置代理

    reg add HKCU Software Microsoft Windows CurrentVersion Internet Settings v ProxyEnable t REG DWORD d 1 f 作用 使用自动配置脚本 reg
  • 2009年8月21日

    开通博客了 new Start 1 加了的Active控件Windows Media Player如何能使用快进FastForward 和快退FastForward 这两个功能呢 给控件关联一个control变量 然后调用FastForwa
  • 攻防世界 web 不能按的按钮 disabled_button

    f12打开开发者工具 点击查看器这一栏 定位到它的图标处 双击进入 里面有代码如下 一般有两种方法 方法一 删除代码 disabled 然后点击网页上的flag图标就可以得到flag了 方法二 将disabled 改为disabled fa
  • C++沉思录读书笔记1.如何定义一个完整的类

    C 沉思录 Ruminations On C 读书笔记1 如何定义一个完整的类 作者 2006 4 27 12 19 C 哲学 只为用到的东西付出代价 定义一个类时必须搞清楚的几个问题 需要构造函数吗 如果答案为 no 那么很可能你需要定义
  • C++ malloc/free/new/delete详解(内存管理)

    这里写目录标题 malloc free 典型用法 内存分配 实现过程 brk和mmap 申请小于128k的内存 申请大于128k的内存 释放内存 brk和mmap的区别 new delete 典型用法 内存分配 实现过程 new delet
  • do...while(0)的妙用

    在C 中 有三种类型的循环语句 for while 和do while 但是在一般应用中作循环时 我们可能用for和while要多一些 do while相对不受重视 但是 最近在读我们项目的代码时 却发现了do while的一些十分聪明的用
  • Truncate和Delete的区别

    1 表和索引所bai占空间 当表被truncate 后 这个表和索引所占du用的空间会恢复到初始zhi大小 delete操作不dao会减少表或索引所占用的空间 2 应用范围 truncate 只能对table delete可以是table和
  • 一份DBA面试题及解答(zt)

    今天在浏览网页时 无意发现了这篇文章 觉得很好 一份DBA面试题及解答 zt 作者 xsb http xsb itpub net 发表于 2006 03 17 13 29 分类 Oracle 出处 http xsb itpub net po
  • 结构体指针数组 内存分配 释放

    include
  • c++ 内存管理一:初识内存分配工具

    文章目录 前言 1 new 和 delete 2 new 和delete 3 operator new 4 placement new 5 malloc和free 6 allocator 前言 侯捷 c 内存管理学习总结笔记 在C 中 有几
  • 查询及删除重复记录

    查询及删除重复记录的方法大全 1 查找表中多余的重复记录 重复记录是根据单个字段 peopleId 来判断select from peoplewhere peopleId in select peopleId from people gro
  • C++中前置声明的应用与陷阱

    前置声明的使用 有一定C 开发经验的朋友可能会遇到这样的场景 两个类A与B是强耦合关系 类A要引用B的对象 类B也要引用类A的对象 好的 不难 我的第一直觉让我写出这样的代码 A h include B h class A B b publ
  • 经典C语言面试题1:malloc 和 new的区别?

    malloc free是 C C语言的标准库函数 而new delete是C 的运算符 malloc内存分配成功返回的类型为void 需要通过强制类型转换将void 转换为我们需要的类型 new内存分配失败时会抛出bac alloc异常 不
  • C++设计日志:读写定界符文件

    C 设计日志 读写定界符文件 荣耀 2003 我将撰写的 C 设计实践 系列文章 会讲到一些数据处理系统设计方法 我并不希望文章局限于特定数据库产品 我也不喜欢空对空地讲述太多抽象道理 我必须编写一些模拟数据库操作的代码 用于读写定界符文件
  • postgresql 删除单个表的数据

    2种方法都只删数据 保留表结构 方法一 适用数据量较小的情况 delete from tablename 方法二 适合删除大量数据 速度快 TRUNCATE TABLE tablename 若该表有外键 要用级联方式删所有关联的数据 TRU
  • utf-8和gb2312的相互转换

    最近老是涉及到编码与解码的问题 GB2312转UTF 8 又或者UTF 8转GB2312 无意中在CSDN闲逛发现了一个CString 转UTF 8的思路 现摘寻下来 免得到时又找不着了 CString UTF8Convert CStrin
  • 介绍一种巧妙的删除程序自己的方法

    介绍一种巧妙的删除程序自己的方法 vcbear 近日看到网友询问如何实现程序运行之后把自己删除的方法 不知大家对木马甚么的兴趣实在太浓 还是想要这样的效果 用户只要一运行程序 可执行文件就没有了 可是程序还是在跑 胆小的只怕要喊 鬼呀 老婆
  • 关于C++对象模型(下)

    下篇主要讨论调用成员函数 访问成员变量的开销 及其特殊成员函数 数组 异常处理的讨论 这篇文章中出现的对象定义都出现在上篇中 全文在这里下载 文章内容转自 http tb blog csdn net TrackBack aspx PostI
  • 20个常见的Java错误以及规避方法

    原文 50 Common Java Errors and How to Avoid Them Part 1 作者 Angela Stringfellow 翻译 雁惊寒 译者注 本文介绍了20个常见的Java编译器错误 每种错误都包含了代码片

随机推荐

  • 电脑开机显示器不显示BIOS界面,直接进入系统解决办法

    背景 xff1a 电脑开机没有电脑品牌的BIOS显示界面 xff0c 而是由黑屏直接进入系统 xff0c 导致无法正常进入BIOS 解决思路 xff1a 开机不显示BIOS界面 xff0c 直接到欢迎界面的可能性有 xff1a 1 开机过程
  • ubuntu-更新源提示-没有release文件-解决办法!

    背景 xff1a 以ubuntu21 04举例 安装完ubuntu系统 xff0c 执行 sudo apt update 更新源 xff0c 出现如下图错误 xff1a 说明你下载的ubuntu系统属于生命终结版本 xff0c 官方不再支持
  • ubuntu增加、删除、查看、赋予权限用户命令大全

    先说下增加用户的两种命令adduser和useradd的区别 xff1a 一 adduser username xff08 1 xff09 会在 etc passwd下面添加注册的账户 xff1a xff08 2 xff09 会在 etc
  • 组装机经验、软硬件故障排除、网络问题

    目录 主板 CPU 内存 显卡 判断显卡好坏的步骤 新买的显卡安装后显示器不亮 电源 其他 网络问题 主板 1 不同主板对于不同数量的内存条安装的位置有要求 xff0c 要按照主板规定的位置安装不同数量的内存条 xff0c 特别是服务器主板
  • Ubuntu系统安装和卸载xfce桌面环境

    Xfce是Linux操作系统的一种开源的免费桌面环境 xff0c 与其他Linux桌面 如GNOME和KDE 相比 xff0c 它消耗的内存和CPU最少 xff0c 这使得它更加轻便和快速 安装和卸载命令见下面链接 xff1a 如何在Ubu
  • 各版本ubuntu缺省内核

    ubuntu20 04 LTS 初始内核 xff1a 5 4 0 26 generic ubuntu21 04 LTS 初始内核 xff1a 5 11 0 16 generic ubuntu22 04 LTS 初始内核 xff1a 5 15
  • VSCode 提取扩展时出错。XHR failed 错误问题

    之前装过一些外网的软件 它的局域网端口是11223 之后不再用了的时候卸载了它 但发现VSCode在扩展商店搜索时会出现 提取扩展时出错 XHR failed 的错误 还有微信小程序开发时也会无法访问接口 提示 11223 什么的 具体的忘
  • Ubuntu 16.04分辨率只有800*600和1360*768分辨率选择,肿么办?

    xff08 1 xff09 首先使用 xrandr 命令列出当前所能检测到的分辨率 xff0c 如一台显示器19寸 xff0c 最佳分辨率为 1440x900 xff0c 由于 未能正确检测 xff0c 使用 xrandr 命令结果如下 x
  • 求字符串中的最长回文子串

    方法一 xff08 暴力法 xff09 xff1a include lt stdio h gt include lt string h gt bool Palindrome const char str int start int end
  • 堆和栈访问效率哪个更高

    1 栈分配的软件优势 xff1a 栈分配算法简单 xff0c 所以高效 xff1b 堆分配算法相对比较复杂 栈分配的硬件优势 xff1a 主要两点 xff0c cache和内存映射 如果在 栈上分配小块内存 xff0c 因为cache和内存
  • C++ Primer学习-第15章 面向对象编程

    15 1 面向对象编程 xff1a 概述 在C 43 43 中 xff0c 基类必须指出希望派生类重新定义那些函数 xff0c 定义为virtual的函数是基类期待派生类重新定义的 xff0c 基类希望派生类继承的函数不能定义为学虚函数 1
  • C++ map表的应用

    map表可以存储数据对应关系 include lt map gt include lt string gt include lt iostream gt using namespace std int main map lt int str
  • C++判断是否是IP地址

    判断是否是IP地址 bool isIPAddress const char s const char pChar bool rv 61 true int tmp1 tmp2 tmp3 tmp4 i while 1 i 61 sscanf s
  • C++判断是否是纯数字

    C 43 43 判断是否是纯数字 bool isDigitStr const char cstr if NULL 61 61 cstr cstr 0 61 61 0 return false int len 61 strlen cstr i
  • 命里有时终须有,命里无时莫强求

    命里有时终须有 xff0c 命里无时莫强求 今天是2012年2月24号 xff0c 和我谈了3个多月的女生突然之间说我们之间不合适 xff0c 让我以后不要再去骚扰她 真心第一次体会到失恋的感觉 xff0c 同时打电话给我姐姐诉说了下 xf
  • 共享内存--函数

    共享内存允许两个不相关的进程访问同一个逻辑内存 共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式 大多数的共享内存的具体实现 xff0c 都把由不同进程之间共享的内存安排为同一段物理内存 共享内存是由IPC为进程创建的一个特殊
  • GNOME 3 介绍 技巧

    https wiki archlinux org index php GNOME 28 E7 AE 80 E4 BD 93 E4 B8 AD E6 96 87 29 GNOME项目使用最新的科技 xff0c 为用户从头打造了全新的现代桌面
  • assert用法

    判断是否为真 include 34 stdio h 34 include lt string h gt include lt stdlib h gt define NDEBUG include lt assert h gt void mai
  • strcpy原型

    已知strcpy 函数的原型是 char strcpy char strDest const char strSrc 其中strDest 是目的字符串 xff0c strSrc 是源字符串 xff08 1 xff09 不调用C 43 43
  • new与delete正确用法

    说明 xff1a 推荐使用如下宏 xff0c 可以在一定程度上避免使用空指针 xff0c 野指针的问题 define HW NEW var classname do try var 61 new classname catch var 61