如果一条dynamic_cast语句的转换目标是指针类型并且转换失败了,会返回一个空指针,则判断条件为0,即为false;如果转换成功,指针为非空,则判断条件为非零,即true。 dynamic_pointer_cast与dynamic_cast用法类似,当指针是智能指针时候,向下转换,用dynamic_Cast 则编译不能通过,此时需要使用dynamic_pointer_cast。 3.2std:...
如果一条dynamic_cast语句的转换目标是指针类型并且转换失败了,会返回一个空指针,则判断条件为0,即为false;如果转换成功,指针为非空,则判断条件为非零,即true。 dynamic_pointer_cast与dynamic_cast用法类似,当指针是智能指针时候,向下转换,用dynamic_Cast 则编译不能通过,此时需要使用dynamic_pointer_cast。 3.2std:...
具体原因同dynamic_cast一样,详细见下边卡片链接文章)以及reinterpret_pointer_cast的使用过程和上面的static_pointer_cast类似,这里不赘述,都是shared_ptr“指针”的相关转换,对应的底层逻辑都是调用const_cast、dynamic_cast以及reinterpret_cast函数进行实现的,这几种针对裸指针(raw pointer)的转换的作用和说明可以参考下...
bq =dynamic_pointer_cast(aq);return0; } 如上例子,可以把指向父类的智能指针赋给指向子类的只能指针。 需要注意的是想要实现这样的转换,父类必须至少有一个虚函数,如例子中class a有一个虚析构函数。
const_cast const_pointer_cast static_cast static_pointer_cast dynamic_cast dynamic_pointer_cast 最后一个小问题:以前,boost中的shared_ptr的cast函数的名字是:shared_xxxx_cast, 后来,为了IDE自动提供帮助,改成了xxxx_pointer_cast。由此可见,设计库还是要用户至上。
shared_ptr还定义了自己的类型转换操作符:static_pointer_cast, dynamic_pointer_cast, const_pointer_cast ,具体用法见下面代码。 (3)弱引用指针weak_ptr不能直接访问对象,但是他有一些工具函数可以用来用 .expired()用来查看自己监视的对象是否还在,或者他依赖的那些强引用指针们还有没有了 ...
shared_ptr<Cat>pc(dynamic_pointer_cast<Cat>(pa));// 转换失败时,返回nullptr 1. 2. 在进行向上转换时,dynamic_cast和static_cast一样,dynamic_pointer_cast和static_pointer_cast一样。但进行向下转换时,dynamic_cast和static_cast不一样,dynamic_pointer_cast和static_pointer_cast也不一样 ...
public:B():b(2) boost:shared_ptr<B> get_ptrb()returnboost:dynamic_pointer_cast<B>(shared_from_this();int b;注意到这里B并没有直接继承 enable_shared_from_this,而是使用 dynamic_pointer_cast 进行了类型转换。 关于为什么enable_shared_from_this 是这样实现的,可以参看作者原文:...
您可以使用 dynamic_pointer_cast、 static_pointer_cast和 const_pointer_cast 轉換成shared_ptr。這些函式類似 dynamic_cast、 static_cast和 const_cast 運算子。下列範例顯示如何測試每個項目的衍生型別在基底類別shared_ptr的向量,然後複製元素並顯示其相關資訊。
shared_ptr<Photo> temp = dynamic_pointer_cast<Photo>(p); return temp.get() != nullptr; }); for (const auto& p : photos) { // We know that the photos vector contains only // shared_ptr<Photo> objects, so use static_cast. wcout << "Photo location: " << (static_pointer_cast<...