【问题标题】:What is wrong with using the new operator?使用 new 运算符有什么问题?
【发布时间】:2014-01-08 05:35:57
【问题描述】:

所以我最近在这个网站上被告知使用new 运算符,但当我问为什么时没有得到回应。 所以我的问题是:使用new 真的有什么不好的地方吗?

我能想到的唯一原因是当new 调用未与delete 调用配对时内存泄漏。

【问题讨论】:

  • 超链接在哪里?
  • 当您不分享上下文时,我们应该如何知道您被告知的原因?
  • 哦,这只是一个关于良好形式的问题,但它是作为答案并发布在以下 cmets 中:stackoverflow.com/questions/20966064/…
  • 好的 - 所以在 main 中使用 new 创建了一个对象,当它可以更容易、有效、简洁和可靠地放入堆栈时 - 请注意程序员忘记了 @ 987654328@它在从main()返回之前,这表明了错误的种类。大多数情况下,对于应用程序级编程,您将拥有一些容器,例如 vectormap,无需您显式使用 new 即可存储值。对于pImpl 和多态状态“机器”,您可能需要在工厂方法中使用new,但在Kerrek 的评论中它们可能有资格作为“专家”。
  • 是的 - AirportGame app; app.run();。动态分配需要在编译时跟踪正在使用的内存 - 它相对昂贵(= CPU 消耗 = 慢)(不仅在 C++ 中,而且在任何语言中都是固有的,垃圾收集更是如此)。堆栈的内存是在编译时计算的,堆栈指针通常只是在函数进入和退出时调整和恢复 - 非常快。

标签: c++ standards new-operator dynamic-memory-allocation


【解决方案1】:

你没有被告知。一位comment说:

除非有充分的理由,否则切勿使用 new

目前是+2(两个赞成意见同意评论)。

在您的示例中,使用 new 是可选的。您可以使用以下方法轻松实例化堆栈上的对象:

sf::RenderWindow window(...);

这样做的好处是不需要显式的delete,并且对象在不再需要时无法逃脱破坏。

在从零(完全无害)到十(破坏生命和财产)的范围内,使用new 可能是 1。不过,由于严重的童年,当一些程序员看到它时,它可能会让他们发疯 早期的创伤被这种渎职行为所咬伤。

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多