`delete[]` 不是 `new[]` 的对应物吗?
Isn't `delete[]` the counterpart to `new[]`?
我正在阅读以复习已有近 2 年历史的 C++ 知识,以便了解有关工厂模式的在线信息。最终的使用上下文可能会使用不同的第三代语言 (3GL),但根据我过去的经验,我认为遵循 C++ 比(比如)Java 更容易,尽管后者可能不那么复杂句法。然而,一个更大的原因是,我能找到的正在解决的问题的唯一代码示例,即在没有工厂模式的情况下,是在 C++ 中。大多数帖子在高层次叙述中谈论模式的原因,然后提供代码来展示模式的机制而不是在没有模式的情况下的问题。
我正在研究的代码位于 here. 我无法理解 delete[]
用于销毁对象这一事实使用 new
创建的。根据各种阅读,delete
与new
一起使用,delete[]
与new[]
一起使用。然而,在远离 C++ 这么久之后,我很容易忽略一些明显的东西。 引用的代码可以吗,还是我说的对?
我在 new
和 delete
上的读数是:
- What is difference between instantiating an object using new vs. without
- What is difference between new and new[1]?
Isn't delete[]
the counterpart to new[]
?
是的。
delete is used with new, and delete[] is used with new[]
正确。
虽然迂腐,但是delete[]
是为了删除数组。 new T[]
总是分配一个数组,但是如果T
是数组类型,new T
也可以分配一个数组。但这种特殊情况不适用于链接的文章。文章有未定义的行为。
文章中的错误还不止于此。还有更多。例如,通过指向派生对象的基子对象的 Vehicle
指针删除的行为是未定义的,因为 Vehicle
的析构函数是非虚拟的。
此外,Client
是可复制的,但它的复制构造函数和赋值运算符违反了 class 唯一性不变式,这是析构函数有效所必需的。
我正在阅读以复习已有近 2 年历史的 C++ 知识,以便了解有关工厂模式的在线信息。最终的使用上下文可能会使用不同的第三代语言 (3GL),但根据我过去的经验,我认为遵循 C++ 比(比如)Java 更容易,尽管后者可能不那么复杂句法。然而,一个更大的原因是,我能找到的正在解决的问题的唯一代码示例,即在没有工厂模式的情况下,是在 C++ 中。大多数帖子在高层次叙述中谈论模式的原因,然后提供代码来展示模式的机制而不是在没有模式的情况下的问题。
我正在研究的代码位于 here. 我无法理解 delete[]
用于销毁对象这一事实使用 new
创建的。根据各种阅读,delete
与new
一起使用,delete[]
与new[]
一起使用。然而,在远离 C++ 这么久之后,我很容易忽略一些明显的东西。 引用的代码可以吗,还是我说的对?
我在 new
和 delete
上的读数是:
- What is difference between instantiating an object using new vs. without
- What is difference between new and new[1]?
Isn't
delete[]
the counterpart tonew[]
?
是的。
delete is used with new, and delete[] is used with new[]
正确。
虽然迂腐,但是delete[]
是为了删除数组。 new T[]
总是分配一个数组,但是如果T
是数组类型,new T
也可以分配一个数组。但这种特殊情况不适用于链接的文章。文章有未定义的行为。
文章中的错误还不止于此。还有更多。例如,通过指向派生对象的基子对象的 Vehicle
指针删除的行为是未定义的,因为 Vehicle
的析构函数是非虚拟的。
此外,Client
是可复制的,但它的复制构造函数和赋值运算符违反了 class 唯一性不变式,这是析构函数有效所必需的。