std::auto_ptr
不允许存储在STL容器中,例如std::vector
。但是,有时我需要返回多态对象的集合,因此我无法返回对象向量(由于切片问题)。我可以用std::tr1::shared_ptr
并将它们粘贴在vector
,但随后我必须付出高昂的代价来维护单独的引用计数,并且拥有实际内存(容器)的对象在逻辑上不再“拥有”对象,因为可以将它们复制出来而不考虑所有权。
C++0x 为这个问题提供了完美的解决方案,形式为std::vector<std::unique_ptr<t>>
,但我无法访问 C++0x。
其他一些注意事项:
- 我无法访问 C++0x,但我有 TR1 可用。
- 我想避免使用 Boost(尽管如果没有其他选择,它是可用的)
- 我知道
boost::ptr_container
容器(即boost::ptr_vector
),但我想避免这种情况,因为它会破坏调试器(内部结构存储在void *
s 这意味着很难在调试器中查看实际存储在容器内的对象)
我要做的就是封装一个本机堆数组。您可以定义您可以支持的向量接口的任何子集,而无需可复制性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)