【问题标题】:Stl c++ dynamic memory allocationstl c++动态内存分配
【发布时间】:2015-01-21 15:45:09
【问题描述】:

我遇到了一些遗留代码,我看到了。

typedef std::queue < EventDataPair > EventQueue;
_eventQueue = new EventQueue();

为什么要使用分配在堆上的 stl 队列??? 包含此代码的类是 Singleton。

概括一下,什么时候应该在堆上分配一个stl??? STL 本身是动态的,它们可能在内部使用堆。

此外,你不会有在析构函数中释放它的开销吗??

【问题讨论】:

  • 出于同样的原因,您可以动态创建任何东西:允许您控制其生命周期。断章取义,没有办法判断这个特定对象是否有充分的理由是动态的。
  • 控制它的生命周期是一个有效的观察......但除此之外,我真的找不到任何理由,尤其是在单例中......你知道该对象永远不会被取消分配。此外,您将有在析构函数中销毁它的开销??
  • 我不认为销毁它有任何开销,除非开销是编写额外的代码,例如delete _eventQueue;?
  • 是的,我的意思是附加代码..不必要地膨胀源文件

标签: c++ stl heap-memory


【解决方案1】:

好吧,除非您想在代码中的不同上下文之间共享特定对象,否则没有太多动力在堆上分配。

但是,对于某些遗留架构,您可能会关心堆栈的大小。

【讨论】:

    【解决方案2】:

    我能想到的一个原因是,在从函数返回副本时避免创建副本的开销。

    但是,对于 C++ 11 和移动语义,这不再需要了。

    看看 Bjarne Stroustrap 所说的this example

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2015-12-07
      • 2015-06-27
      • 2021-02-28
      • 2012-01-20
      • 1970-01-01
      相关资源
      最近更新 更多