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

Is it safe to delete a forward_list in C++?

我有一个正在处理的个人项目,在这个个人项目中,我曾使用 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 指针吗?

想象一下有人拿着盒子里的电池phone走来走去。盒子里面有一个摄像头,外面有一个显示器,显示盒子里 phone 上的内容。它有奇特的触摸 waldos,可以触摸你在盒子上触摸的任何东西,但在 phone.

盒子坏了连phone都坏了!

phone屏幕没有显示大

他们来找你,问他们是否可以把盒子(里面有 phone)送到电子产品回收站。

答案是"sure, that is safe",但真正的问题是,他们为什么要首先建造这个盒子?

盒子,在这个类比中,就是指针,调用 new 就是创建盒子。对 delete 的调用正在回收它(里面有 phone)。

phone 是转发列表。