为什么禁止在c ++中进行静态分配?

时间:2015-03-31 18:20:24

标签: c++ object dynamic static creation

将类的构造函数设为private并具有返回新实例的getInstance方法有什么意义?您何时只想允许动态对象创建?为什么?我已经看到了这方面的例子,我不明白为什么。

4 个答案:

答案 0 :(得分:1)

这通常在类实例管理自己的生命周期时完成,例如:他们会订阅一些异步的事件。如果实例在事件到达之前被销毁,则事件调度程序将使用野指针并导致未定义的行为。

答案 1 :(得分:0)

最明显的例子是,如果班级管理自己的生命周期。允许静态分配会导致双重释放。

答案 2 :(得分:0)

通常是因为程序员想要随时控制活着的对象。有效用例是:

  • 单身人士模式

  • 保持所有对象的隐式列表,以便于对所有这些对象进行操作

  • 重复使用已存在的对象

最后一个目标通常还要求引用计数能够在不再需要时销毁对象,并且要求对象在逻辑上保持不变。这种用法的一个用法是实现性能的内部字符串(它允许通过比较它们的指针来比较字符串!)。

答案 3 :(得分:0)

一个原因可能是当您想要将创建的特定类型控制为调用应用程序不需要知道的几种可能的子类型之一时。

例如,您可能希望获得ConnectionURL下载资源,而URL将确定返回Connection的特定类型 - {{ 1}},HTTPConnectionHTTPSConnection等...