我创建了一个智能指针类,如:智能指针数组
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
升压库),但现在我有,我想存储的动态数组的要求在一个OBJ智能指针,并且它必须支持:
1)插入新的智能指针存入智能指针数组让阵列调整大小并获取新obj的所有权,
2)删除一个智能指针即时和资源获得fre编辑,
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;
};
在此先感谢!
为什么不使用已存在的智能指针?见例如['std :: shared_ptr'](http://en.cppreference.com/w/cpp/memory/shared_ptr)和['std :: unique_ptr'](http://en.cppreference.com/w/cpp /存储器/的unique_ptr)。 –
'auto_ptr'在标准库中,而不是boost。你需要'shared_ptr'(或'unique_ptr',如果你可以使用C++ 11的话)。 – kennytm
你需要复制运算符和复制赋值运算符([three规则](http://en.wikipedia.org/wiki/Rule_of_three_ (C%2B%2B_programming)))。你必须弄清楚适当的所有权转让政策。除了学习,没有理由重新发明车轮。 –