我正在从Java转向C++,并且非常喜欢它。我不喜欢的一件事是根本不理解记忆,因为Java曾经为我做过这件事。C++,Seg故障和内存管理
我已经购买了一本书:内存++一个编程的概念在C和C - 弗朗Franek
是否有一些好的网站,我去和交互式学习C/C++和内存使用(教程,论坛,用户组)?
我正在从Java转向C++,并且非常喜欢它。我不喜欢的一件事是根本不理解记忆,因为Java曾经为我做过这件事。C++,Seg故障和内存管理
我已经购买了一本书:内存++一个编程的概念在C和C - 弗朗Franek
是否有一些好的网站,我去和交互式学习C/C++和内存使用(教程,论坛,用户组)?
尝试这些:
http://www.mycplus.com/tutorials/cplusplus-programming-tutorials/memory-management/
http://www.cantrip.org/wave12.html
http://linuxdevcenter.com/pub/a/linux/2003/05/08/cpp_mm-1.html
而在维基:http://en.wikibooks.org/wiki/C++_Programming/Memory_Management
本文将与C++当量比较Java的内存管理运营商:http://www.javamex.com/java_equivalents/memory_management.shtml
http://www.infosys.tuwien.ac.at/Staff/tom/Teaching/UniZH/CPP/slides/cpp_07.pdf
希望这些可以帮助你!
内存管理在C++中几乎是自动的(有一些注意事项)。
大部分时间不要动态分配内存。
使用局部变量(和普通成员变量),它们将自动构造和破坏。
当你需要指针时使用智能指针。
开始使用boost :: shared_pointer <T>而不是指针。
这将使您在正确的路径上停下来,并在错误的时间意外删除内存,并且90%的代码将正确释放(不幸的是,循环会导致问题(仅在泄漏方面),您将需要相应地进行设计但我们有其他智能指针来处理周期weak_ptr))
我的基本规则是一个类永远不会包含RAW指针。总是使用某种形式的标准容器或智能指针。使用这些;析构函数调用变为自动的。
一旦你的感觉开始阅读有关的其他智能指针,以及何时使用它们:
+1,特别是对于“大多数情况下不会动态分配内存”。 – 2010-02-09 19:58:10
@Martin - 出于真正的兴趣:是不是使用'shared_ptr'处处有点慢?你会推荐它用于模拟还是视频游戏? – Manuel 2010-02-09 20:07:56
是什么让你觉得它很慢?但是,我不是无处不在推荐它。我推荐它作为学习智能指针的起点。使用正确的智能指针来解决手头的问题(但你必须开始somwhere,智能指针是一个相当大的话题)。 PS。我在模拟器中的智能指针没有问题(正确性为王,在显示它为瓶颈后进行优化)。 – 2010-02-09 20:12:29
这个讨论有很多有用的信息:http://stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c – Manuel 2010-02-09 19:52:46
哇。从Java到C++并享受它。我印象深刻。 – JesperE 2010-02-09 19:52:52
嗯,你强调的是正确的事情,因为理解资源管理是(恕我直言)对成为一名称职的C++开发人员来说绝对至关重要。 – 2010-02-09 20:06:08