这行代码尝试将 basePtr 转换为 std::shared_ptr<Derived>。dynamic_pointer_cast 会在运行时检查转换是否安全(即 basePtr 是否确实指向一个 Derived 类对象)。如果转换成功,derivedPtr 将被赋予新的类型,并指向原来的对象;如果转换失败,derivedPtr 将为nullptr。 检查转换结果并调用方法: cpp if (derived...
3.shared_ptr<T> ptr2(ptr1); // 使用拷贝构造函数的方法,会让引用计数加 1 //shared_ptr 可以当作函数的参数传递,或者当作函数的返回值返回,这个时候其实也相当于使用拷贝构造函数。 4./*假设B是A的子类*/ shared_ptr<B> ptrb(new B()); shared_ptr<A> ptra( dynamic_pointer_cast<A>(ptrb) );...
shared_ptr<D> spd = shared_dynamic_cast<D>(spb); //变成子类的指针 shared_ptr在竭尽全力表演的像一个原生指针,原生指针能干的事,它也基本上能干。 另一个同get相关的错误 shared_ptr<T> sp(new T); shared_ptr<T> sp2( sp.get() ) ;//又一个“二龙治水”实例,指针会删2次而错误。 条款14...
您可以使用dynamic_pointer_cast、static_pointer_cast和const_pointer_cast来转换shared_ptr。 这些函数类似于dynamic_cast、static_cast和const_cast运算符。 以下示例演示如何测试基类的shared_ptr向量中每个元素的派生类型,然后复制元素并显示有关它们的信息。
你可以用dynamic_pointer_cast,static_pointer_cast和const_pointer_cast来转换shared_ptr。这些函数的操作类似dynamic_cast,static_cast和const_cast。下面的示例演示如何测试在基类的shared_ptr向量中的每个元素的派生类,,然后复制元素,并显示它们的信息。
static_cast, dynamic_cast, const_cast, reinterpret_cast. 但是当面对boost::shared_ptr的时候呢? reinterpret_cast 可以转换任何类型,这个在讨论范围之外。 对于下面的这个定义: 1classA 2{ 3public: 4virtual~A() {} 5}; 6 7classB 8:publicA ...
上面描述的中文含义为:表达式std::shared_ptr<T>(static_cast<T*>(r.get()))、std::shared_ptr<T>(dynamic_cast<T*>(r.get())以及std::shared_ptr<T>(const_cast<T*>(r.get()))似乎(might seem)有相同的效果,但是这些表达式会造成程序产生未定义行为,未定义行为就是可能会尝试销毁删除同一个对象...
不同之处在于,shared_dynamic_cast只适用于shared_ptr<>的,而dynamic_pointer_cast适用于任何类型的...
您可以使用 dynamic_pointer_cast、static_pointer_cast 和const_pointer_cast 来转换 shared_ptr。 这些函数类似于 dynamic_cast、static_cast 和const_cast 运算符。 以下示例演示如何测试基类的 shared_ptr 向量中每个元素的派生类型,然后复制元素并显示有关它们的信息。