Подтвердить что ты не робот

Переместить право собственности из std:: shared_ptr в std:: unique_ptr

У меня есть класс A, у которого есть поле типа std::unique_ptr:

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

И где-то в коде, я использую несколько std::shared_ptr, которые указывают на один и тот же объект. Теперь я хотел бы добиться перехода к этому std::unique_ptr в моем классе, так что, если все shared_ptr будут уничтожены, мой объект останется в живых, пока этот unique_ptr останется в живых.

Мой вопрос: возможно ли переместить право собственности с std::shared_ptr на std::unique_ptr, и если да, то как я могу это сделать?

4b9b3361

Ответ 1

Логически такой сценарий для меня не имеет смысла.

Предположим, что на некоторое время можно передать право собственности, но вы можете это сделать только тогда, когда вы уверены, что существует только один shared_ptr alives; Если это так, то вы можете использовать shared_ptr как член A и притворяться, что это unique_ptr.

И затем вы прокомментировали:

Это правда, я мог бы создать shared_ptr в классе A. Я думаю, что я неправильно понял концепцию. Я хотел вести себя так: если unique_ptr умирает, сам объект тоже умирает, хотя shared_ptr все еще указывает на него, но глупо, поскольку они не знают, что сам объект был уничтожен, и поэтому они не будут " t be nullptr s.

В этом случае вы смотрите на неправильный умный указатель. Вероятно, вам понадобится std::weak_ptr. Если это так, убедитесь, что вы используете std::shared_ptr, а все остальные - как std::weak_ptr.