在C ++中删除forward_list是否安全?

时间:2015-08-28 20:01:13

标签: c++ pointers delete-operator forward-list

我有一个个人项目,我正在研究它,在这个个人项目中,我曾使用forward_list来存储一些关于某些文件的信息。 然后我去玩游戏,我突然想到:我的f_list被摧毁了吗? 在我的项目中,我只使用了delete指向列表的指针。

std::forward_list<fileInfo> *lst;
lst = new std::forward_list<fileInfo>;
*lst = getDirectoryFiles(cfg->logDirectory);
lst->sort();
// do something
delete lst;

我运行了单独的测试(for (uint i = 0; i < 1000000; ++i) lst>push_front(i);),delete按预期工作(在任务管理器中,此列表的内存大约为77 MB,删除后大约为400 kb)。

但是我仍然担心这在所有编译器和操作系统中是否安全(我在MSVC2013中尝试过这种方法)。

我应该先调用clear()列表,然后点击指针delete吗?

1 个答案:

答案 0 :(得分:4)

想象一下有人带着手机走进一个盒子里。盒子里面有一个摄像头,外面有一个显示器,显示盒子里的电话。它有花哨的触摸沃尔多斯,可触摸你在盒子上触摸的任何东西,但在手机上。

如果盒子损坏,它甚至会损坏手机!

手机屏幕不会显示得更大。

他们来找你并询问他们是否可以将盒子(带有手机)送到电子产品回收中。

答案是肯定的,这是安全的,但真正的问题是,他们为什么要首先制造这个盒子?

在这个类比中,框是指针,对new的调用正在创建框。对delete的呼叫正在回收它(手机内部)。

手机是转发名单。