在C++ 03中返回类似`std :: auto_ptr`的集合的最佳方法是什么?

Bil*_*eal 7 c++ collections memory-management auto-ptr c++03

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中,这意味着很难在调试器中查看实际存储在容器内的对象)

Pup*_*ppy 3

我要做的就是封装一个本机堆数组。您可以定义您可以支持的向量接口的任何子集,而无需可复制性。

  • 即实现您自己的具有所需语义的“std::vector”? (2认同)