2011年5月20日
map< string, Obj > 与 map< string, Obj* >
评分:3.3/5 (70 票)
让我们来讨论一下 map< string, Obj > 与 map< string, Obj* > 的优缺点
您何时使用其中一种而不是另一种?您是否使用一个简单的规则,比如如果 Obj 是 POD(纯旧数据),则使用 Obj - 否则,如果它是类/结构,则使用 Obj*?
请贡献您的优点和缺点,我将把您的评论添加到 OP - 谢谢
==================================================================
map< string, Obj >
- 对于大型 Obj,初始复制构造代价高
+ 内存管理简单:超出作用域后会自动释放
+ 在所有权方面更显式/自包含
+ 读取速度稍快,因为不需要间接引用
- 可能需要默认构造函数
=====================================================================
map< string, Obj* >
+ 插入/复制成本低:只复制指针
- 必须考虑 new/delete 的所有权问题
+ 更灵活:实际 Obj 可以存在于其他地方
- 需要额外的间接引用
+ 如果您创建了大量的 Obj(需要 new),可以利用内存池
=====================================================================
std::unique_ptr<> 如何与 boost::singleton_pool<> 交互?
我很久以前就用过 unique_ptr<>,在我被 auto_ptr<> 坑过之后 - 在使用它之前我需要更多地了解它……
顺便说一句,我认为它不是线程安全的,对吧?
在使用 unique_ptr 时有什么需要注意的吗?
编辑:unique_ptr<> 基本上是一个所有者?左值成为所有者?
编辑:valgrind 会正常工作还是会卡住 unique_ptr<>?