我有一个个人项目,我正在研究它,在这个个人项目中,我曾使用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
吗?
答案 0 :(得分:4)
想象一下有人带着手机走进一个盒子里。盒子里面有一个摄像头,外面有一个显示器,显示盒子里的电话。它有花哨的触摸沃尔多斯,可触摸你在盒子上触摸的任何东西,但在手机上。
如果盒子损坏,它甚至会损坏手机!手机屏幕不会显示得更大。
他们来找你并询问他们是否可以将盒子(带有手机)送到电子产品回收中。
答案是肯定的,这是安全的,但真正的问题是,他们为什么要首先制造这个盒子?
在这个类比中,框是指针,对new
的调用正在创建框。对delete
的呼叫正在回收它(手机内部)。
手机是转发名单。