Назначение shared_ptr для слабого_птра - PullRequest
0 голосов
/ 18 марта 2019

Я хочу присвоить созданный shared_ptr для слабого_птра:

std::weak_ptr<void> rw  = std::shared_ptr<void>(operator new(60), [](void *pi) { operator delete(pi); });

Но, когда я делаю rw.expired(), он показывает, что срок действия истек, значит, он пуст.Любые предложения, где я иду не так?

Заранее спасибо.

1 Ответ

1 голос
/ 18 марта 2019

Цель std::shared_ptr - освободить управляемый объект, когда последний общий указатель, который указывает на него, уничтожен или переназначен куда-либо еще.Вы создали временный общий ptr, присвоили ему значение std::weak_ptr, а затем оно просто уничтожается в конце выражения.Вы должны сохранить его:

auto shared = std::shared_ptr<void>(operator new(60), [](void *pi) { operator delete(pi); });
std::weak_ptr<void> rw  = shared;

сейчас rw не истечет, по крайней мере, пока shared еще жив.

...