私は次のようなスマートポインタクラスを作成しました:
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)その場で1つのスマートポインタを削除すると、リソースが解放されます。
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;
};
前もって感謝します!