によって管理されるクラスを作成していますunique_ptr
が、さまざまな理由から、実装にオブジェクトへの生のポインターへのアクセスを許可する必要があります。ただし、ユーザーが基になるオブジェクトを誤って削除しないようにしたいと考えています。次のコード例を思いつきました:
(これはツリー構造の一部であり、ツリー ノードのメンバーを実際にデタッチせずに見ることができる必要があります。shared_ptr
この状況ではやり過ぎのようです。)
#include <memory>
using namespace std;
class unOnly
{
~unOnly() {}
public:
unOnly() {}
friend class default_delete<unOnly>;
};
int main()
{
unique_ptr<unOnly> ptr(new unOnly());
}
これは、gcc 4.4.5 でコンパイルされます。ただし、すべての実装で、プライベート実装クラスとは対照的に、default_delete
実際にオブジェクトであると確信できますか? delete
念のため、自分のデリータを作成する必要がありますか?