1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
static_type = "class A"; const char* B::static_type = "class B"; int main () { std::shared_ptr<A> foo; std::shared_ptr<B> bar; foo = std::make_shared<A>(); // cast of potentially incomplete object, but ok as a static cast: bar = std::static_pointer_cast<B>(foo);...
static_pointer_cast<T>(p); ``` 其中,T是目标类型,p是待转换的指针或引用。static_pointer_cast的语义是执行一次类型转换,将p转换为T类型的指针或引用。 在源码解析之前,我们需要了解C++的类型系统和编译器实现。C++的类型系统包括类型别名、类型兼容性、类型转换等概念,而编译器实现则涉及到语法分析、语义分析...
std::shared_ptr<T> static_pointer_cast( const std::shared_ptr<U>& r ) noexcept; (1) (C++11 起) template< class T, class U >std::shared_ptr<T> static_pointer_cast( std::shared_ptr<U>&& r ) noexcept; (2) (C++20 起) template< class T, class U >std::shared_ptr<T> ...
r-the pointer to convert Notes The expressionsstd::shared_ptr<T>(static_cast<T*>(r.get())),std::shared_ptr<T>(dynamic_cast<T*>(r.get()))andstd::shared_ptr<T>(const_cast<T*>(r.get()))might seem to have the same effect, but they all will likely result in undefined behavior...
static_pointer_cast template<classT,classU>std::shared_ptr<T>static_pointer_cast(conststd::shared_ptr<U>&r)noexcept{autop=static_cast<typenamestd::shared_ptr<T>::element_type*>(r.get());returnstd::shared_ptr<T>{r, p};} dynamic_pointer_cast ...
七十八、static_cast和dynamic_cast,static_poonter_cast和dynamic_pointer_cast区别,一、static_cast和dynamic_cast区别:1、static_cast:向上转换,例如:基类向派生类转换2、dynamic_cast:向下转换,例如
我了解将 static_pointer_cast 与 unique_ptr 一起使用会导致所包含数据的共享所有权。 换句话说,我想做的是: {代码...} 无论如何,这样做会导致两个 unique_ptr 永远不应该同时存在,所以它只是被禁止的。 是...
因此,首先将weak_ptr<something>转换为weak_ptr<void>,然后将其转换为void*,然后可以将void*转换回...
template <class Ty, class Other> shared_ptr<Ty> static_pointer_cast(const shared_ptr<Other>& sp); 参数 Ty 返回的共享指针控制的类型。 Other 参数控制的类型共享指针。 Other 共享指针参数。 备注 模板函数的情况下返回空 sp 对象是否是一个空 shared_ptr 对象;否则返回的资源由 spshared_ptr 类拥有的...