c++ - 这是系统资源吗? (或者我怎么知道我是否需要删除指针)- 在 C++ 中使用 C

标签 c++ pointers time delete-operator

看着这个cplusplus.com time example ,让我更多地思考指针。该代码没有delete(也没有new)。

警告:我一般尽量避免指点,所以肯定不精通。

为了专注于我的问题,我从下面的示例中删除了很多代码:

/* time example */
#include <stdio.h>      /* printf */
#include <time.h>       /* time_t, struct tm, difftime, time, mktime */

int main ()
{
  time_t timer;
  time(&timer);  /* get current time; same as: timer = time(NULL)  */

  return 0;
}

我应该在最后删除计时器,还是只是指向系统资源?我的理解是,无论何时我使用new,我都应该使用delete。认为因为我没有使用 new,所以我不需要 delete 是否正确。

This stack question似乎是我要找的东西,并解释说我不需要 delete(与网站上的示例代码匹配),因为我没有做 new;但是,我不确定我正在使用的函数是否在某处调用了 new(因为我发现很难阅读源代码)。我怎么知道?我需要知道吗?

我真的很讨厌使用这些旧代码,并且等不及即将到来的 C++20 chrono 更新,但这对我的项目来说太遥远了。

最佳答案

简答:

不!


长答案:

您的代码中没有指向使用 new 分配的内存的指针,因此您不需要delete 任何内容。而且,您的推理是正确的,无论何时在代码中分配某些内容,您也有责任取消分配它。最好用RAII (资源获取即初始化)以管理需要取消分配的资源。

对于您关于 API 内部分配的问题,作为程序员您自己有责任通过 API 的文档来解决这个问题。某些 API 要求您以特定方式取消分配已分配的内存,这种方式(理想情况下)有很好的记录,您应该遵循该方式。

在 C 中,内存分配为 malloc()必须使用 free() 取消分配.

在 C++ 中,内存分配为 newnew[] 必须使用 delete 取消分配或 delete[],分别。

顺便说一句,您应该尽可能在代码中使用 C++11 的智能指针(std::unique_ptrstd::shared_ptr 以及 std::make_uniquestd::make_shared)来强制执行 RAII。

关于c++ - 这是系统资源吗? (或者我怎么知道我是否需要删除指针)- 在 C++ 中使用 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814914/

相关文章:

c - 如何使指针变量在函数中可见

c++ - 将一组字符串与一个字符串进行比较的最快方法是什么?

c++ - Windows UTC 时间与夏令时无关吗?

c++ - 无状态和有状态压缩之间的区别?

c++ - 使 malloc() 回到初始状态

C 空指针算法

c++ - 一个类应该使用函数指针调用另一个类的方法

ios - 接受 hh :mm format 中文本字段的时间输入的正则表达式应该是什么

c++ - 为什么链接库的顺序会导致运行时错误?

c++ - 停留在一个基本的 OpenGL 程序上