为了阅读有关工厂模式的在线信息,我正在阅读将近20年的C ++知识。最终的使用上下文可能会使用不同的第三代语言(3GL),但是由于我过去的经验,我认为遵循C ++比(说)Java更容易,尽管后者的语法可能不太复杂。但是,更大的原因是,我能找到的唯一要解决的问题的代码示例是C ++,即没有工厂模式时。大多数帖子都在高层叙事中讨论模式的原因,然后提供代码以显示模式的机制,而不是在没有模式的情况下显示问题。
我正在研究的代码位于here。我很难理解delete[]
用于销毁使用new
创建的对象这一事实。根据各种读数,delete
与new
一起使用,delete[]
与new[]
一起使用。但是,在远离C ++这么长时间之后,我很容易忽略了明显的东西。 引用的代码是否正确,或者我正确吗?
我在new
和delete
上的读数是:
delete[]
不是new[]
的对应对象吗?
是
delete用于new,delete []用于new []
正确。
虽然是徒劳的,但delete[]
用于删除数组。 new T[]
总是分配一个数组,但是如果new T
是数组类型,则T
也可以分配一个数组。但是,这种极端情况不适用于链接的文章。该文章具有未定义的行为。
甚至还没有结束本文中的错误。还有更多。例如,通过指向指向派生对象的基础子对象的Vehicle
指针删除行为是不确定的,因为Vehicle
的析构函数是非虚拟的。
此外,Client
是可复制的,但是其复制构造函数和赋值运算符违反了析构函数有效所必需的唯一性类不变性。