看着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[]取消分配用deletedelete[]分配的内存。

顺便说一句,您应该尽可能使用C ++ 11的智能指针(分别为std::unique_ptrstd::shared_ptr以及std::make_uniquestd::make_shared)在代码中实施RAII。

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

10-11 22:57
查看更多