проверить существующий shared_ptr при использовании enable_shared_from_this в c ++? - PullRequest
0 голосов
/ 03 ноября 2010

Помимо перехвата ошибки bad_weak_ptr, возникающей при попытке вызвать shared_from_this () для указателя, который является необработанным указателем, есть ли способ проверить, считается ли объект подсчитываемым, или нет? 1001 *

У меня естьфункции, которые имеют дело с необработанным указателем и указателем общего доступа, и я хочу быть уверен, что ошибка очевидна при использовании неправильного?Конечно, я могу просто уловить ошибку, но мне просто интересно, есть ли простой способ тестирования для этого конкретного случая?

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

Вызов std::enable_shared_from_this<T>::shared_from_this() никогда не завершится ошибкой для существующего действительного объекта или указателя на него.РЕДАКТИРОВАТЬ: ... если есть хотя бы один экземпляр std::shared_ptr<YourClass>, где YourClass равно std::enable_shared_from_this<YourClass>.Это более строгое утверждение, чем первое, и я прошу прощения, если оно было неправильно понято.

Вы гарантируете правильность shared_from_this(), создавая только shared_ptr экземпляров ваших классов.Невозможно проверить, управляется ли экземпляр YourClass с помощью shared_ptr, кроме перехвата исключения.

1 голос
/ 03 ноября 2010

Не смешивайте необработанные и управляемые указатели.

...