C++ 指针数组:删除还是删除[]?

2024-01-25

考虑以下代码:

class Foo
{
    Monster* monsters[6];

    Foo()
    {
        for (int i = 0; i < 6; i++)
        {
            monsters[i] = new Monster();
        }
    }

    virtual ~Foo();
}

什么是正确的析构函数?

this:

Foo::~Foo()
{
    delete [] monsters;
}

or this:

Foo::~Foo()
{
    for (int i = 0; i < 6; i++)
    {
        delete monsters[i];
    }
}

我目前有最上面的构造函数,一切都工作正常,但当然我看不到它是否碰巧泄漏......

就我个人而言,考虑到我正在做的事情,我认为第二个版本更加合乎逻辑。无论如何,“正确”的方法是什么?


delete[] monsters;

不正确,因为monsters不是指向动态分配数组的指针,它is指针数组。作为类成员,当类实例被销毁时,它会自动被销毁。

您的另一种实现是正确的,因为数组中的指针确实指向动态分配Monster对象。

请注意,使用当前的内存分配策略,您可能需要声明自己的复制构造函数和复制赋值运算符,以便无意的复制不会导致重复删除。 (如果你想防止复制,你可以将它们声明为私有,而不是实际实现它们。)

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

C++ 指针数组:删除还是删除[]? 的相关文章

  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • suhosin.mt_srand.ignore 在 PHP 中一致洗牌数组的解决方法?

    我有一个 PHP 脚本 需要随机化一个具有一致结果的数组 这样它就可以向用户呈现前几个项目 然后如果他们愿意 他们可以从同一个打乱的集合中提取更多结果 我目前使用的是这个 基于我相信的 Fisher Yates 算法 function sh
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 如何在 C# 中检测工作的互联网连接?

    我有一个 C 代码 基本上通过 FTP 协议上传文件 使用FtpWebRequest 然而 我想在尝试上传文件之前首先确定是否存在有效的互联网连接 因为 如果没有 则尝试没有意义 软件应该休眠一段时间并再次检查 有没有一种简单的方法可以做到
  • lapply 并应用于列表 R 的每个组件和元素

    我有这个清单 lst lst lt list a c 2 5 9 8 5 0 6 7 6 5 5 2 34 4 4 2 39 5 1 3 0 0 0 0 4 1 0 0 0 0 25 5 196 5 0 0 104 2 0 0 0 0 0
  • 在 Excel 宏中设置图表坐标、标题和添加文本的代码格式建议

    编写了一个宏 用 Excel 绘制带有标记的线 它在单个宏 xlsm 文件中运行良好 但是当我尝试将其转换为 Excel 插件 xlam 文件 时 它出现了很多错误 所有错误都与 X 和 Y 坐标的格式 图表标题的位置 字体类型和大小以及添
  • 可以在引导之前使用自定义 Angular 服务吗?

    我有一个服务 angular module USC service TemplateService function 我想在手动引导我的 Angular 项目之前使用它 angular bootstrap document USC 这可能吗
  • 量角器片状

    我维护一个复杂的 Angular 1 5 x 应用程序 正在使用 Protractor 2 5 x 对其进行 E2E 测试 我在使用这种方法时遇到了一个问题 主要表现为测试看起来不稳定 在一个拉取请求中运行良好的测试在另一拉取请求中失败 这
  • 在 NestJS 中添加 HttpRequest 标头

    我正在尝试在 NestJS 中发出 Http 请求 因为它的灵感来自 Angular 所以我添加了我的标题 import Injectable HttpService from nestjs common const headersRequ
  • JS等待获取=> [对象响应]

    我有这个问题 API Blynk cc 有 2 个输出可能 TRUE 或 FALSE 简单文本 无 JSON 访问 https ip port APIKey isHardwareConnected 时 我得到 TRUE 或 FALSE 当我
  • 从 InternetAddress 打印发件人的电子邮件地址

    这是获取的代码sender和subject使用此代码 我看到显示了正确的主题 但我看到发件人的地址以不同的格式显示 Properties props new Properties props put mail imap host imap
  • 尝试在 AWS Lambda 中运行 Flask 应用程序时出现错误

    我正在尝试使用 AWS Lambda 部署一个在本地运行良好的 Flask 应用程序severless 部署很好 但我无法使用 aws lambda app 我收到一个错误502 Bad Gateway message Internal s
  • 如何生成 yyyymm 值范围? [复制]

    这个问题在这里已经有答案了 我有两个将由用户输入的 yyyymm 值 yyyymm 1 201406 yyyymm 2 201501 我希望能够以递增的月份顺序迭代此范围 for yyyy and mm in the range of yy
  • 如何修复非法指令(核心转储)

    您好 我正在尝试解决此问题 当我运行下面的 python3 Brain py 时 出现此错误 非法指令 核心转储 from imageai Prediction import ImagePrediction import os execut
  • 生产中的 Create-React-App:找不到路由

    我有一个以 Create React App 和 Express js 作为后端的全栈应用程序 开发设置 CRA 在端口 3000 上运行 是由 CRA 的代理实现的 因此我可以将某些路由直接转发到后端 在端口 5000 上运行 proxy
  • 通过notifyDataSetChanged() 没有更改/黑屏;

    我想做这样的事情 同时按下refresh按钮 它将刷新列表 活动代码如下 adapter new TweetAdapter Welcome this tweets users tweetsList setAdapter adapter pr
  • 这个语法是什么意思? (序言)

    我一直在尝试学习 Prolog 并在一些示例代码中遇到了这种语法 solve Hs Hs member h dog Hs 这只是代码的一部分 但我对h dog does 任何帮助将不胜感激 下划线 只是表明该位置有一个值 但我们不关心它 第
  • 使用 BeginInvoke 和 EndInvoke 时,如何避免必须传递/存储委托?

    Edit 将实际问题移至顶部 Update 找到了微软的一个例子 最后添加了一些代码 我的问题是 在同一个委托实例上调用多个 BeginInvoke 调用是否安全 或者我是否必须为每个正在进行的方法调用构造一个新的委托实例 如果我必须为每个
  • Java 8 扩展流

    我正在尝试扩展 Java 8 的 Stream 实现 我有这个界面 public interface StreamStuff
  • git pull 导致“文件取消链接失败”错误

    我正在尝试做一个git pull我遇到了可怕的 取消文件 xxx 链接失败 错误 我已经尝试过 ProcessExplorer 中定义的this https stackoverflow com a 6076796 341611回答 使用 f
  • 访问 ActiveDirectory 的代码的单元测试

    对访问 ActiveDirectory 的应用程序进行单元测试和 或模拟对 AD 的依赖关系的最佳方法是什么 所有必需的类型 例如DirectorySearcher and DirectoryEntry看起来并不容易被嘲笑 我们有类似的方法
  • 使用 htaccess 文件删除 html 扩展名

    我知道这是一个非常常见的话题 但没有一个解决方案适合我 我尝试过几个答案 answer 1 https stackoverflow com questions 15728888 how do i remove html extensions
  • C++ 指针数组:删除还是删除[]?

    考虑以下代码 class Foo Monster monsters 6 Foo for int i 0 i lt 6 i monsters i new Monster virtual Foo 什么是正确的析构函数 this Foo Foo