【问题标题】:drawbacks of using new/delete in ANSI C [closed]在 ANSI C 中使用 new/delete 的缺点 [关闭]
【发布时间】:2015-01-24 14:19:51
【问题描述】:

如果我编写了一个 ANSI C 代码,并且我使用 new 和 delete 运算符进行动态内存管理。 使用它有什么缺点吗?

extern "C" void allocateString(char **str, int size) {
   *str = new char[size];
}

这只是一个示例代码。

【问题讨论】:

  • 最重要的缺点是new不在C语言中
  • C 中的新功能 :-)
  • 这是一个 C++ 函数,使用“C”外部链接导出 - 不是 ANSI C 代码。缺点是您必须在调用代码中解除分配 str (或有内存泄漏),除非您提供相应的 deallocateString API,否则客户端代码将不得不猜测它应该使用 delete[] *str 才能正确执行此操作。这是糟糕的 C++ API 设计。
  • 从问题中删除了 C 和 ANSI 标签。

标签: c++ memory-management


【解决方案1】:

newdelete 都不属于 ANSI C。它们是 C++ 标准的一部分。

在 C 中,堆上的动态内存分配是使用 malloc()free() 和相关的 函数 执行的,它们构成 C 库的一部分(而不是语言本身作为 @ 987654325@ 和 delete 运算符 使用 C++)。

因此,使用它们依赖于您的 C 编译器不确认 C 标准(或者更准确地支持不属于标准的扩展)。

最好选择一种语言或另一种语言,避免两者混用。

【讨论】:

    【解决方案2】:

    C 标准不包括 new 和 delete 运算符。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2012-08-02
      • 2013-02-04
      相关资源
      最近更新 更多