我创建了一个智能指针类,如:
template <class T>
class Owner
{
T* m_p;
public:
Owner(T *p=0) : m_p(p) {}
~Owner() { if (m_p) delete m_p; }
T* operator ->() { return m_p; }
T& operator *() { return *m_p; }
// other members.
};
它工作得很好(类似于auto_ptr
in boost 库),但现在我需要将智能指针的动态数组存储在 obj 中,并且它必须支持:
1)将新的智能指针插入到智能指针数组中,让数组调整大小并获得新obj的所有权,
2)动态删除一个智能指针并释放资源,
3)当最终确定数组时,所有对象都被删除。
我在考虑使用std::vector<Owner<T> >
,但似乎 c++ 最佳实践建议不要将智能指针存储在 std 容器中,因为复制/分配行为,那么我可以采用哪些其他方法来实现这一点?类似于以下示例中的 OwnerArr :
class Adapter;
class Computer
{
public:
Computer() {}
~Computer() { // adapters get freed automatically here. }
void insertAdapter(Adapter* pAdapter) { m_adapters->appendOne(pAdapter); }
OwnerArr<Adapter> m_adapters;
};
提前致谢!