gpt4 book ai didi

c++ - 我应该删除来自其他函数或类方法的指针吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:10:41 25 4
gpt4 key购买 nike

我有 Java 背景,但我还没有完全习惯指针和范围的概念,如果这个问题看起来很愚蠢,我很抱歉。

我在某处读到我应该删除在堆上分配的指针。我明白这一点,但我是否也应该删除像这样给我的指针:

#include<dirent.h>

DIR* dir;
struct dirent* entries;

dir= opendir("D:/DIR")
entries= readdir(entries)

// Should I delete the pointers after I'm done with them?
delete entries;
delete dir;

我应该删除从其他地方分配的指针还是只是超出范围会自动删除它们?

或者因为我没有使用 new 分配它们,所以删除它们是否正确?但是,如果它是错误的,我如何确保在我使用完其他方法后,从其他方法分配的内存将被删除?

最佳答案

不一定。

C++ 中不可避免的规则是每个 new 都需要与 delete 配对,每个 new[] 都与 delete[],以及 mallocfree 等。仍然可用。

因此很容易假设您从 readdir 取回的内存需要通过显式调用 delete 来释放,但是可能 不是这样的:

  1. 它可能已经分配了 new[],甚至 malloc!

  2. 该库可能会提供您需要调用的释放内存的函数。

  3. 如果该库有说服力与 C++ 标准库一起工作,它可能会为您提供一个删除器:您可以将其传递给一个智能指针 例如 std::unique_ptr

我认为 (2) 最有可能也是最明智的,因为不同的 C++ 运行时环境可能会以不同方式执行 newdelete。 (3) 是对该概念的扩展,如果他们支持它,则使用它。

黄金法则是检查文档并按照它告诉你的去做。

关于c++ - 我应该删除来自其他函数或类方法的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48151025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com