【发布时间】:2015-01-21 15:45:09
【问题描述】:
我遇到了一些遗留代码,我看到了。
typedef std::queue < EventDataPair > EventQueue;
_eventQueue = new EventQueue();
为什么要使用分配在堆上的 stl 队列??? 包含此代码的类是 Singleton。
概括一下,什么时候应该在堆上分配一个stl??? STL 本身是动态的,它们可能在内部使用堆。
此外,你不会有在析构函数中释放它的开销吗??
【问题讨论】:
-
出于同样的原因,您可以动态创建任何东西:允许您控制其生命周期。断章取义,没有办法判断这个特定对象是否有充分的理由是动态的。
-
控制它的生命周期是一个有效的观察......但除此之外,我真的找不到任何理由,尤其是在单例中......你知道该对象永远不会被取消分配。此外,您将有在析构函数中销毁它的开销??
-
我不认为销毁它有任何开销,除非开销是编写额外的代码,例如
delete _eventQueue;? -
是的,我的意思是附加代码..不必要地膨胀源文件
标签: c++ stl heap-memory