【发布时间】:2020-07-18 18:06:52
【问题描述】:
我正在阅读以复习近 2 年历史的 C++ 知识,以便了解有关工厂模式的在线信息。最终的使用上下文可能会使用不同的第 3 代语言 (3GL),但由于我过去的经验,我认为 C++ 比(比如说)Java 更容易遵循,即使后者在语法上可能不那么复杂。然而,一个更大的原因是,我能找到的唯一一个正在解决的问题的代码示例,即在没有工厂模式的情况下,是用 C++ 编写的。大多数帖子在高级叙述中讨论模式的原因,然后提供代码来显示模式的机制,而不是在没有模式的情况下显示问题。
我正在研究的代码位于 here。 我无法理解 delete[] 用于销毁使用 new 创建的对象这一事实。根据各种读数,delete 与new 一起使用,delete[] 与new[] 一起使用。然而,在远离 C++ 这么久之后,我很容易忽略一些明显的东西。 引用的代码是否正确?
我对@987654330@ 和delete 的阅读是:
【问题讨论】:
-
你是对的。那篇文章不正确,是UB
-
Geeks for Geeks 是一个非常糟糕的网站。我建议避免它。 (除非你的学习风格最好由一些权威提供错误信息和错误代码,然后你通过找出他们在哪里误导你来学习。那么我认为这是一个很好的网站。)
-
delete和delete[]做的第一件事就是测试 null。这使得Client析构函数中的大部分代码几乎无用。 -
@sweenish,如果你在析构函数中两次,你已经在前面被冲洗了。
-
@sweenish 在删除之前永远不需要检查 null。删除 null 无效。它永远不会出现段错误。
标签: c++ new-operator delete-operator