更新: 本例中的 shared_ptr 与 Boost 中的类似,但它不支持 shared_polymorphic_downcast(或 dynamic_pointer_cast 或 static_pointer_cast)!
当需要shared_ptr实现向上向下转换时,可以使用 dynamic_pointer_cast 来进行转换 下面是例子: #include<memory>usingnamespacestd;classa{public:virtual~a(){}; };typedefshared_ptr aptr;classb:publica { };typedefshared_ptr bptr;int_tmain(intargc, _TCHAR* argv[]) { b* bb =newb;aptraq(bb); ...
dynamic_pointer_cast与dynamic_cast用法类似,当指针是智能指针时候,向下转换,用dynamic_Cast 则编译不能通过,此时需要使用dynamic_pointer_cast。 3.2std::shared_ptr<void> 类似于void *想到了std::shared_ptr<void>,了解了一下还真有。先看看直接使用void*有哪些弊端: void*不能保证类型安全,可以将一个void *...
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也不一样 *animal_p=newC...
可以通过std::static_pointer_cast函数来实现。std::static_pointer_cast是C++标准库中的一个模板函数,用于将一个shared_ptr对象从一个派生类指针转...
需要用static_cast 转换普通指针的地方,用shared_static_cast 转换shared_ptr, 需要用dynamic_cast 转换普通指针的地方,用shared_dynamic_cast 转换shared_ptr. 前面说过,没有const的shared_ptr,但是有 1constA*pA=newB(); 2shared_ptr<constA>cpA(pA);//const ...
shared_ptr有多种形式的构造函数,可以应用于各种可能的情形,示例如下。■ 无参的shared_ptr():创建一个持有空指针的shared_ptr。■ shared_ptr(Y*p):获得指向类型T的指针p的管理权,同时将引用计数置为1,这个构造函数要求Y类型必须能够转换为T类型。
为了最佳性能,尽量减少使用TWeakPtr::Pin()(它可以把弱指针转成 TSharedRef/TSharedPtr ) 如果你的类从 TSharedFromThis 继承,它可以返回它自己的一个共享引用。 如果想要向下类型转换,转换为自己的子类指针,可以使用 StaticCastSharedPtr()函数 共享指针完全支持const对象! 你可以使用ConstCastSharedPtr函数使一个...
在C++中,std::tr1是一个技术标准库,它包含了一些实验性的C++库,其中之一就是std::tr1::shared_ptr。std::tr1::shared_ptr是一个智能指针,它提供了一种方法来管理动态分配的对象,并在不再需要时自动释放它们。 std::tr1::shared_ptr的主要优势是它可以自动管理对象的生命周期,从而避免了内存泄漏和悬挂指针的...
3.shared_ptr指针的引用计数 当进行拷贝和赋值操作时,每个shared_ptr都会记录有多少个其他shared_ptr指向相同的对象。在每个shared_ptr都有一个关联的计数器,通常称其为引用计数。无论何时我们拷贝一个shared_ptr,计数器都会递增。例如,当用一个shared_ptr初始化另一个shared_ptr,或将它作为参数传递给一个函数以及作...