Namespaces
Variants

std::experimental:: static_pointer_cast, std::experimental:: dynamic_pointer_cast, std::experimental:: const_pointer_cast, std::experimental:: reinterpret_pointer_cast

From cppreference.net
std::experimental::shared_ptr
Member functions
Non-member functions
experimental::static_pointer_cast experimental::dynamic_pointer_cast experimental::const_pointer_cast experimental::reinterpret_pointer_cast
Members and non-members identical to those of std::shared_ptr
template < class T, class U >

std:: experimental :: shared_ptr < T >

static_pointer_cast ( const std:: experimental :: shared_ptr < U > & r ) noexcept ;
(1) (техническая спецификация библиотеки fundamentals)
template < class T, class U >

std:: experimental :: shared_ptr < T >

dynamic_pointer_cast ( const std:: experimental :: shared_ptr < U > & r ) noexcept ;
(2) (техническая спецификация библиотеки fundamentals)
template < class T, class U >

std:: experimental :: shared_ptr < T >

const_pointer_cast ( const std:: experimental :: shared_ptr < U > & r ) noexcept ;
(3) (техническая спецификация библиотеки fundamentals)
template < class T, class U >

std:: experimental :: shared_ptr < T >

reinterpret_pointer_cast ( const std:: experimental :: shared_ptr < U > & r ) noexcept ;
(4) (техническая спецификация библиотеки fundamentals)

Создает новый экземпляр std::experimental::shared_ptr , чей сохраненный указатель получается из сохраненного указателя r с использованием выражения приведения типа. Если r пуст, новый shared_ptr также будет пустым (но его сохраненный указатель не обязательно будет нулевым).

В противном случае новый shared_ptr будет разделять владение с r , за исключением того, что он будет пустым, если dynamic_cast , выполняемый dynamic_pointer_cast , возвращает нулевой указатель.

Пусть Y будет typename std:: experimental :: shared_ptr < T > :: element_type , тогда сохранённый указатель результирующего std::experimental::shared_ptr будет получен вызовом (в соответствующем порядке):

1) static_cast < Y * > ( r. get ( ) ) .
2) dynamic_cast < Y * > ( r. get ( ) ) (если результат dynamic_cast является нулевым указателем, возвращаемый shared_ptr будет пустым).
3) const_cast < Y * > ( r. get ( ) ) .
4) reinterpret_cast < Y * > ( r. get ( ) ) .

Поведение этих функций не определено, если соответствующее приведение от U* к T* не является корректным:

1) Поведение не определено, если static_cast < T * > ( ( U * ) nullptr ) не является корректной конструкцией.
2) Поведение не определено, если dynamic_cast < T * > ( ( U * ) nullptr ) не является корректно сформированным выражением.
3) Поведение не определено, если const_cast < T * > ( ( U * ) nullptr ) не является корректно сформированным выражением.
4) Поведение не определено, если reinterpret_cast < T * > ( ( U * ) nullptr ) не является корректно сформированным выражением.

Параметры

r - указатель для преобразования

Пример

Смотрите также

создает новый shared_ptr
(публичная функция-член)
применяет static_cast , dynamic_cast , const_cast , или reinterpret_cast к сохраненному указателю
(шаблон функции)