私は以下のことを行う必要があると仮定します(これはC++標準の議論のための想像力のあるコードなので、私はなぜこのように設計するのか議論しませんので、間違っている。)同じアドレス、複数のshared_ptrカウンタは、C++標準によって禁止されていますか?
T* ptr = new T;
shared_ptr<T> p(ptr);
shared_ptr<T> q(ptr, SomeDeleterThatDoesnotDeleteButDoSomeOtherStuff());
ので、実質的に何の問題がないだろう、ロジックはそのコピーのp
または一部が長いq
のすべてのコピーよりも住んでいることを保証したとします。私の質問は、C++標準では禁止されているかどうかです。同じアドレスを共有する異なるshared_ptrカウンタのために、C++標準で明示的にUBと記述されていますか?
ありがとうございました。
あなたが 'return q;'ならば? –
@Peterそれは、ノン・デリターを呼び出すために、リファレンスのいくつかのサブセットが空になっているという知識に役立つ何かをするというアイデアだと思います。 – Potatoswatter
そのデザインはその目的のためにひどいものではありません。カスタムデリターを*削除*したものに置き換えることで、適切な破壊を保証することができます。また、自身の 'shared_ptr'を所有しています。1.デストラクターでアクションを実行するダミーオブジェクトに、または2.アクションを実行する別のカスタムdeleter 。しかし、これらの方法は、q個のオブジェクトの集合が適切な所有者のセット「p」に対して急速に変化する場合、効率が悪くなる可能性がある。 – Potatoswatter