2010-02-09 111 views
6

我正在从Java转向C++,并且非常喜欢它。我不喜欢的一件事是根本不理解记忆,因为Java曾经为我做过这件事。C++,Seg故障和内存管理

我已经购买了一本书:内存++一个编程的概念在C和C - 弗朗Franek

是否有一些好的网站,我去和交互式学习C/C++和内存使用(教程,论坛,用户组)?

+0

这个讨论有很多有用的信息:http://stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c – Manuel 2010-02-09 19:52:46

+2

哇。从Java到C++并享受它。我印象深刻。 – JesperE 2010-02-09 19:52:52

+0

嗯,你强调的是正确的事情,因为理解资源管理是(恕我直言)对成为一名称职的C++开发人员来说绝对至关重要。 – 2010-02-09 20:06:08

回答

2
+0

伟大的列表。我可以添加这个:http://www.parashift.com/c++-faq-lite/freestore-mgmt.html – Manuel 2010-02-09 19:54:50

+0

+1一些好的艺术家。 – 2010-02-09 19:55:24

+0

真棒链接。非常感谢! – Stephano 2010-02-09 23:10:27

5

内存管理在C++中几乎是自动的(有一些注意事项)。

大部分时间不要动态分配内存。
使用局部变量(和普通成员变量),它们将自动构造和破坏。

当你需要指针时使用智能指针。
开始使用boost :: shared_pointer <T>而不是指针。
这将使您在正确的路径上停下来,并在错误的时间意外删除内存,并且90%的代码将正确释放(不幸的是,循环会导致问题(仅在泄漏方面),您将需要相应地进行设计但我们有其他智能指针来处理周期weak_ptr))

我的基本规则是一个类永远不会包含RAW指针。总是使用某种形式的标准容器或智能指针。使用这些;析构函数调用变为自动的。

一旦你的感觉开始阅读有关的其他智能指针,以及何时使用它们:

Smart Pointers: Or who owns you baby?

+0

+1,特别是对于“大多数情况下不会动态分配内存”。 – 2010-02-09 19:58:10

+0

@Martin - 出于真正的兴趣:是不是使用'shared_ptr'处处有点慢?你会推荐它用于模拟还是视频游戏? – Manuel 2010-02-09 20:07:56

+2

是什么让你觉得它很慢?但是,我不是无处不在推荐它。我推荐它作为学习智能指针的起点。使用正确的智能指针来解决手头的问题(但你必须开始somwhere,智能指针是一个相当大的话题)。 PS。我在模拟器中的智能指针没有问题(正确性为王,在显示它为瓶颈后进行优化)。 – 2010-02-09 20:12:29