【问题标题】:When do I need to use malloc in C++?我什么时候需要在 C++ 中使用 malloc?
【发布时间】:2011-12-09 03:04:29
【问题描述】:

如果我可以在 C++ 中创建一个 QString,例如:

QString s = "my string"; // or,
QString *s = new QString("my string");

那么,我什么时候需要使用malloc?

【问题讨论】:

  • 这个问题强化了我的观点,即在 C++ 之前学习 C 可以让您更好地理解该语言。
  • @Jesse:怎么会这样?在C++之前学习C只会在这里巧合,因为malloc来自C。但这与C没有直接关系,它只是C++中的另一个记忆功能。
  • @GMan:我明白你的意思。如果您能够在不学习 C 的情况下识别出 C 的内容以及 C++ 试图从 C 中改进的内容,那很好。但是,对于没有使用 C 编程的人来说,更难理解以下问题:“为什么不应该使用 malloc?”

标签: c++ c qt qt4


【解决方案1】:

您永远不需要在 C++ 中使用 malloc。

好的,既然我已经说过从不,一个例外是当您使用 C 代码时,由于某种原因或其他原因获取了您提供给它的一块内存的所有权,然后调用 @987654322 @ 指向该内存的指针以释放它。

我以前从未见过这种情况(我通常不使用 C 库,我不知道这种情况有多普遍),这只是一种人为的情况,我可以想到在哪里使用 malloc 会 不是可选的,因为在new创建的一块内存上调用free是未定义的行为。

【讨论】:

  • @VladLazarenko touche :) “C”和“old”在我的脑海中并存,但这是错误的,只是我似乎无法摆脱的习惯。我修好了。
  • 虽然我不能举出例子,但我听说有人说用 malloc 覆盖 new 运算符有时效率更高。有cmets吗?
  • 为了纠正自己,我的意思是重载,而不是覆盖。有区别。
  • 啊,现在我明白你的意思了。是的,我的意思是重载 operator new 和 operator delete,但我没有正确表达它。我应该说“通过使用 malloc 重载 operator new”或类似的东西。不过我的意图很明确:)
  • @xcrypt 对不起,英语不是我的母语,所以有时微小的差异真的会让我失望。我将删除我所有的 cmets,因为它们毫无意义。
【解决方案2】:

在 C++ 中几乎不需要使用 malloc。

【讨论】:

    【解决方案3】:

    永远不会!

    malloc 分配未初始化的内存。你很少需要在 C++ 中这样做。大多数时候,您使用new 和delete 创建和销毁对象。

    在某些情况下,您确实需要分配未初始化的内存,例如在实现动态大小的容器(如 std::vector 和 boost::optional)时。但是C++的方式不是用malloc和free而是做

    void* p = operator new(1000);
    ...
    operator delete(p);
    

    【讨论】:

      【解决方案4】:

      与 C 不同,C++ 主要为您处理分配和释放。

      换句话说,你不应该在你的例子中使用malloc。

      【讨论】:

      • FTFY:与 C 不同,C++ 模糊内存分配和释放。
      • @matt:该评论为-1。 new 和 delete 一点也不晦涩难懂。如果您不能理解这些,那么您不应该使用 C++ 或 C 进行编程。
      • @MSalters:我从没说过有。事实上,我根本没有提到new 或delete。
      猜你喜欢
      • 2011-04-22
      • 2011-09-18
      • 2010-12-30
      • 2011-07-07
      • 2017-08-17
      • 1970-01-01
      • 2011-07-26
      • 2013-03-17
      相关资源
      最近更新 更多