【发布时间】:2013-04-08 18:03:03
【问题描述】:
由于 STL 容器要求所有内容都是可复制和可分配的,那么在处理不可复制对象时,首选的习惯用法是什么?
我可以想到两种不同的方法:
存储(智能)指针而不是 STL 容器中的对象。
摆脱 STL 容器并实现我自己的列表(例如,每个对象都必须包含指向下一个对象的指针)。
第二种方法的主要缺点是析构函数的实现(是否应该以递归方式在当前对象之前销毁“下一个”对象?)
【问题讨论】:
-
当然这取决于具体情况,但我通常会投票 1),如果只是因为出错的可能性较小。当然,您确实会失去诸如
std::vector的缓存友好性之类的东西... -
Boost Intrusive 是 2) 的实现
-
Since STL containers require that all contents be copyable and assignable我认为现在可移动性已经足够了?假设您真的是指标准库。 -
@BoBTFish 这看起来像是我的答案
-
“由于 STL 容器要求所有内容都是可复制和可分配的” - 不,它们不需要(如果您指的是最新的 C++ 标准库)。