17

Atype のフィールドを持つクラスがありますstd::unique_ptr:

class A
{
public:
   std::unique_ptr pointer;
// class body
};

コードのどこかでstd::shared_ptr、同じオブジェクトを指すいくつかの s を使用しています。今私が達成したいのはstd::unique_ptr、クラスで所有権を this に移動することです。これにより、すべてshared_ptrの s が破棄された場合、これが生き続ける限り、オブジェクトは生き続けることができunique_ptrます。

私の質問は、所有権を から に移動することは可能std::shared_ptrですstd::unique_ptrか? はいの場合、どうすればこれを行うことができますか?

4

1 に答える 1

15

論理的には、そのようなシナリオは私には意味がありません。

しばらくの間、所有権を譲渡することが可能であると仮定します。ただし、それを行うことができるのは、生存者が1 つだけであることが確実な場合のみです。その場合でも、のメンバーとして使用して、それがであるふりをすることができます。 shared_ptrshared_ptrAunique_ptr

そして、あなたは次のようにコメントしました。

確かshared_ptrに、A クラスで作成できました。コンセプトを少し誤解していると思います。私はそれをこのように振る舞いたいと思っていました:死ぬと、 s がまだそれを指していてunique_ptrも、オブジェクト自体も死ぬのですが、それはばかげています。shared_ptrnullptr

その場合、間違ったスマート ポインターを見ています。おそらく必要なものは と呼ばれstd::weak_ptrます。その場合は、必ず 1 つとstd::shared_ptr他のすべてを として使用してくださいstd::weak_ptr

于 2013-03-11T12:08:34.313 に答える