【问题标题】:C++, Seg Faults, and Memory ManagementC++、Seg 错误和内存管理
【发布时间】:2010-02-09 19:44:15
【问题描述】:

我正在从 Java 迁移到 C++,并且非常喜欢它。我不喜欢的一件事是根本不了解内存,因为 Java 曾经为我做这件事。

我买了一本书:内存作为 C 和 C++ 中的编程概念 - Frantisek Franek

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

【问题讨论】:

  • 哇。从 Java 到 C++ 并享受它。我印象深刻。
  • 嗯,您强调的是正确的事情,因为了解资源管理(恕我直言)对于成为一名称职的 C++ 开发人员来说绝对至关重要。
  • @JesperE 确实,我自己也很惊讶。我可能应该提一下,我这样做是出于教育原因,而不是为了工作。我想如果我的老板想让我突然用 C++ 编写一个应用程序,那会比有趣更令人沮丧。
  • 我认为“着迷”是您要寻找的词,而不是“享受”。 ;-)

标签: c++ c memory-management


【解决方案1】:

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

大多数时候不要动态分配内存。
使用局部变量(和普通成员变量),它们会自动构造和销毁。

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

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

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

Smart Pointers: Or who owns you baby?

【讨论】:

  • +1,尤其是对于“大多数时候不动态分配内存”。
  • @Martin - 出于真正的兴趣:在任何地方使用shared_ptr 是不是有点慢?您会推荐它用于模拟游戏还是视频游戏?
  • 是什么让你觉得它很慢?但不,我不会在任何地方推荐它。我推荐它作为学习智能指针的起点。使用正确的智能指针来解决手头的问题(但你必须从某个地方开始,智能指针是一个相当大的话题)。 PS。我对模拟器中的智能指针没有任何问题(正确性是王道,在你证明它是瓶颈后进行优化)。
【解决方案2】:
猜你喜欢
  • 2010-11-25
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2012-05-08
  • 1970-01-01
  • 2020-09-21
  • 2021-11-01
相关资源
最近更新 更多