私はスマートポインタのリストを持っています。私はこれらのスマートポインタのいくつかを通常のポインタとして動作させたい、つまり、単にインスタンスへの参照であり、その解放には関与していないことを意味する。たとえば、スタックに割り当てられたインスタンスを指す場合があります。リスト内の他のスマートポインタは、通常のboost :: shared_ptrとして動作します。ここで破壊時に削除しないように設定できるブーストスマートポインタクラスはありますか?
は、クラスがどのように見えるかです:
template<class T> smart_ptr {
private:
T *p;
boost::shared_ptr<T> sp;
public:
smart_ptr(T *p): p(p), shared(0) { } // p will not be deleted
smart_ptr(boost::shared_ptr<T> &sp): p(sp.get()), sp(sp) { }
T *get() const { return p; }
}
これを行いブーストクラスがあれば、私はクラスを自分で書くのではなく、それを使用することを好むだろう。それはないと思われるか、間違っていますか?
目的のポインタがpointeeの割り当てを解除するものではない場合は、その "スマート"な部分は何ですか?普通の古いポインタ(T *)が持っていないものから何を望みますか? –
OPは両方に同じ静的型を必要とするため、コレクション内に所有インスタンスと所有外インスタンスを混在させることができます。 –