Глядя на интерфейс в стандарте, я не вижу ничего, что могло бы сделать достойный тест.Конечно, вы всегда можете обойти проблему:
std::shared_ptr<T> getPointer() {
try {
return this->shared_from_this());
}
catch (std::bad_weak_ptr const&) {
throw std::runtime_error("not owned by smart pointer");
}
}
Конечно, вы также можете просто не перехватить исключение std::bad_weak_ptr
и сделать так, чтобы исходное исключение выходило из функции.
Кстати, при выдаче исключений настоятельно рекомендуется выбрасывать исключение, полученное из std::exception
.Если вы когда-нибудь получили исключение, вы ничего не знаете, вы проклянете парня, который его создал, потому что не всегда легко получить это исключение, чтобы выяснить, о чем оно (хотя отладчики могут помочь, если необходимо, установив перерывуказать на внутреннюю функцию, генерирующую исключение).Гораздо проще просто написать результат what()
.