看着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/