stdlib的free()函数不适用于stl变量。 有没有一种常见的方式来释放由stl(像矢量,地图,集等)举起的空间?释放stl所占用的空间
回答
STL对象自动处理自己的释放。当一个STL对象超出作用域时,它的析构函数将被运行,这将实现必要的释放。正如FrédéricHamidi在评论中指出的那样,如果在堆上分配,您应该自己释放对象。在C++中建议使用new/delete而不是C的malloc/free组合。
除非它通过'new'运算符被分配在堆上。 –
@FrédéricHamidi:免费店铺* –
@光,免费商店是正确的术语,是的,我站在更正:) –
free
是一个C函数,不调用析构函数;因此,它在C++中几乎总是错误的。 delete
在C++中是等效的。
尽管如此,你应该在这里做什么取决于你的意思是“STL变量”。如果你的意思是C++标准库对象,那么你去分配他们以同样的方式使用C你去分配任何对象++:
如果没有手动内存管理对象,无能为力 ;
int main() { std::vector<int> v{0,1,2}; }
如果手动与
new
创建它的内存管理的对象,你可以使用delete
;int main() { std::vector<int>* ptr = new std::vector<int>(); ptr->push_back(0); ptr->push_back(1); ptr->push_back(2); delete(ptr); } // (PLEASE don't do this)
如果手动内存管理由在阵列中与
new[]
它创建的对象,使用delete[]
。int main() { std::vector<int>* ptr = new std::vector<int>[1]; ptr[0].push_back(0); ptr[0].push_back(1); ptr[0].push_back(2); delete[](ptr); } // (PLEASE don't do this either)
然而,在情况2和3,你应该真正使用了智能指针代替,如std::unique_ptr
或std::shared_ptr
;手动内存管理是不好!
你不应该尝试手动内存管理C++标准库容器内的任何元素,容器拥有这些和意志已经免费了需要记忆:
int main()
{
std::vector<int> v{0,1,2};
delete &v[0];
} // (So, so wrong)
你可以滚你自己分配器以您自己的方式管理容器内的对象。
http://www.codeproject.com/Articles/4795/C-Standard-Allocator-An-Introduction-and-Implement
一些分配器是准备使用(看看的boost ::池)
- 1. mergeChangesFromContextDidSaveNotification占用所有空间
- 2. STL向量释放
- 3. ScrollView minHeight占用所有空间
- 4. Zimbra不释放空间
- 5. 什么时候变量占用的空间在C++中被释放?
- 6. 关闭时,任务栏占用的空间被阻止并且不会释放
- 7. 在oracle中释放USERS表空间的未使用空间
- 8. 内容占用页眉和页脚之间的所有空间
- 9. OpenFeint磁盘空间占用空间
- 10. 无法在我的弹出功能中释放/释放空间?
- 11. 释放stl容器中的opencv图像?
- 12. 释放SQL Server中的空间
- 13. UIImagePickerController不释放内存占用
- 14. MongoDB占用太多空间?
- 15. 自动占用空间
- 16. AllegroGraph占用磁盘空间
- 17. SetVisible(false)占用空间
- 18. 隐藏JQGrid占用空间
- 19. 确保组件占用了SplitPane中的所有可用空间
- 20. UIWebView占用UiNavigationController中的所有可用空间
- 21. 灵活的宽度按钮不占用所有可用空间
- 22. CUDA共享内存占用比所需空间多两倍的空间
- 23. Oracle 10g - 无法释放表空间中的空间
- 24. 释放内存包含STL类
- 25. 以不占用旧空间的方式缩放css3
- 26. ZODB不释放硬盘空间
- 27. 如何在hadoop中释放dfs空间?
- 28. mysql:如何释放空间(innodb)
- 29. 如何释放内存空间?
- 30. memsql如何从plancachedir释放空间
你没有(在大多数情况下) – P0W
您是否在寻找类似的'delete'运算符(如果您的STL容器分配在堆上)? –
@POW所以C++有自动垃圾收集? – ishan3243