看着这个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++ 中,内存分配为 new
或 new[]
必须使用 delete
取消分配或 delete[]
,分别。
顺便说一句,您应该尽可能在代码中使用 C++11 的智能指针(std::unique_ptr
和 std::shared_ptr
以及 std::make_unique
和 std::make_shared
)来强制执行 RAII。
关于c++ - 这是系统资源吗? (或者我怎么知道我是否需要删除指针)- 在 C++ 中使用 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814914/