不是[delete []`与`new []`对应吗?

问题描述 投票:0回答:1

为了阅读有关工厂模式的在线信息,我正在阅读将近20年的C ++知识。最终的使用上下文可能会使用不同的第三代语言(3GL),但是由于我过去的经验,我认为遵循C ++比(说)Java更容易,尽管后者的语法可能不太复杂。但是,更大的原因是,我能找到的唯一要解决的问题的代码示例是C ++,即没有工厂模式时。大多数帖子都在高层叙事中讨论模式的原因,然后提供代码以显示模式的机制,而不是在没有模式的情况下显示问题。

我正在研究的代码位于here我很难理解delete[]用于销毁使用new创建的对象这一事实。根据各种读数,deletenew一起使用,delete[]new[]一起使用。但是,在远离C ++这么长时间之后,我很容易忽略了明显的东西。 引用的代码是否正确,或者我正确吗?

我在newdelete上的读数是:

c++ new-operator delete-operator
1个回答
1
投票

delete[]不是new[]的对应对象吗?

delete用于new,delete []用于new []

正确。

虽然是徒劳的,但delete[]用于删除数组。 new T[]总是分配一个数组,但是如果new T是数组类型,则T也可以分配一个数组。但是,这种极端情况不适用于链接的文章。该文章具有未定义的行为。


甚至还没有结束本文中的错误。还有更多。例如,通过指向指向派生对象的基础子对象的Vehicle指针删除行为是不确定的,因为Vehicle的析构函数是非虚拟的。

此外,Client是可复制的,但是其复制构造函数和赋值运算符违反了析构函数有效所必需的唯一性类不变性。

© www.soinside.com 2019 - 2024. All rights reserved.