STL容器:如std::vector、std::string等。 智能指针:如std::unique_ptr、std::shared_ptr等。 B-1:基类与派生类之间的转换 #include<iostream>#include<memory>classBase{public:virtual~Base()=default;virtualvoidshow()const{std::cout<<"Base class"<<std::endl;}};classDerived:publicBase{public:voidsho...
// 创建一个普通的传送门 std::shared_ptr<Derived> derived =std::make_shared<Derived>(); // static_cast老爷爷挥挥魔杖... std::shared_ptr<Base> base =static_cast<std::shared_ptr<Base>>(derived); // ✨ 哇!传送门升级成功! // 但是要记住: // ✅ Derived → Base 升级:绝对安全!
The expressions std::shared_ptr<T>(static_cast<T*>(r.get())), std::shared_ptr<T>(dynamic_cast<T*>(r.get())) and std::shared_ptr<T>(const_cast<T*>(r.get())) might seem to have the same effect, but they all will likely result in undefined behavior, attempting to delete th...
这个函数返回的是shared_ptr类型sp的一份共享拷贝,只不过它指向的对象类型从原来的U变为T。 例子: // static_pointer_cast example #include <iostream> #include <memory> struct A { static const char* static_type; const char* dynamic_type; A() { dynamic_type = static_type; } }; struct B: A...
Static cast to shared_ptr.复制 template <class Ty, class Other> shared_ptr<Ty> static_pointer_cast(const shared_ptr<Other>& sp); ParametersTy The type controlled by the returned shared pointer. Other The type controlled by the argument shared pointer. Other The argument shared pointer....
很简单,这是一个函数。shared_ptr<T>是返回值 函数名称:static_pointer_cast;参数const shared_ptr<U>&r'就这么简单。补充:那不叫取址。。那叫引用。你难道这点c++基础都没有?那你还敢看Boost源码?
void* ptr = &i;int* intPtr =static_cast<int*>(ptr);// 将 void* 转换回 int* 避免隐式转换不当发生:有时构造函数或重载运算符可能引发隐式类型转换,用static_cast可以使转换更清晰、避免歧义。 static_cast的限制 不能用于转换不相关的指针类型。
表达式 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())) 看起来可能拥有相同效果,但它们全都很可能导致未定义行为,试图删除同一对象二次!
常见的智能指针有 std::shared_ptr、std::unique_ptr 和std::weak_ptr。智能指针能够自动释放所管理的对象,从而避免内存泄漏。 std::shared_ptr:引用计数型智能指针,多个 shared_ptr 实例可以共享同一个对象,当最后一个 shared_ptr 被销毁时,所管理的对象也会被自动删除。 std::unique_ptr:独占所有权的智能...
创建std::shared_ptr的新实例,其存储指针从r的存储指针用转型表达式获得。 若r为空,则新的shared_ptr亦然(但其存储指针不必为空)。否则,新的shared_ptr将与r的初始值共享所有权,但若dynamic_pointer_cast所进行的dynamic_cast返回空指针,则它为空。