Dav*_*vid 0 c++ time pointers delete-operator
看看这个cplusplus.com时间示例,让我更多地思考指针.代码没有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;
}
Run Code Online (Sandbox Code Playgroud)
我应该在此结束时删除计时器,还是只是指向系统资源?我的理解是每当我使用时new,我都应该使用delete.认为我没有使用是不对的new,我不需要delete.
这个堆栈问题似乎是我正在寻找和解释我不需要delete(它匹配网站上的示例代码),因为我没有做new; 但是,我不确定我使用的函数是不是在new某个地方调用(因为我发现它很难读取源代码).我怎么知道?我需要知道吗?
我真的很讨厌使用这个旧的时间代码,不能等待即将到来的C++ 20 chrono更新,但这对我的项目来说太遥远了.
简短回答:
没有!
答案很长:
您的代码中没有指向分配的内存的指针new,因此您不需要delete任何操作.并且,您的推理是正确的,无论何时在代码中分配某些内容,您都有责任对其进行解除分配.最好使用RAII(资源获取初始化)来管理需要解除分配的资源.
对于关于API内部分配的问题,作为程序员,您自己有责任通过API的文档来解决这个问题.某些API要求您以特定方式取消分配已分配的内存,这(理想情况下)已有很好的文档记录,您应该遵循这一点.
在C++中,分配有new或new[]必须分别用delete或分配的内存delete[].
顺便说一句,你应该使用C++ 11的智能指针(以及分别std::unique_ptr和它们std::shared_ptr一起)尽可能在你的代码中强制执行RAII.std::make_uniquestd::make_shared