我創建了一個智能指針類,如:智能指針數組
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)))。你必須弄清楚適當的所有權轉讓政策。除了學習,沒有理由重新發明車輪。 –