内容纲要

  • TSharedFromThis

在添加 AsShared 或 SharedThis 函数的 TSharedFromThis 中衍生类。利用此类函数可获取对象的 TSharedRef。

就是继承了 TSharedFromThis 类后,可以使用 AsShared 或者 SharedThis 函数,将自身的裸指针转换为共享指针,原因是父类中储存了弱指针

例如代码:SmartSharedPtr.Get()->AsShared();
就是将智能指针 SmartSharedPtr 通过 Get() 函数获得裸指针,再通过 AsShared() 函数获得共享指针。

AsShared 返回的是 TSharedFromThis T
SharedThis 返回的是自身

函数

  • MakeShared 和 MakeShareable

在常规C++指针中创建共享指针。MakeShared 会在单个内存块中分配新的对象实例和引用控制器,但要求对象提交公共构造函数。MakeShareable 的效率较低,但即使对象的构造函数为私有,其仍可运行。利用此操作可拥有非自己创建的对象,并在删除对象时支持自定义行为。

就是构建一个全新的对象实例

  • StaticCastSharedRef 和 StaticCastSharedPtr

静态投射效用函数,通常用于向下投射到衍生类型。

class FBase {};
class FDerived : public FBase {};

TsharedPtr<FBase> DerivedAsBasePtr(new FDerived());
TsharedPtr<FDerived> DerivedPtr(StaticCastSharedPtr<DerivedAsBasePtr>());
//就是子类和父类的互相转换
  • ConstCastSharedRef 和 ConstCastSharedPtr

将 const 智能引用或智能指针分别转换为 mutable 智能引用或智能指针。

TsharedPtr<const float> ConstFloat(new float(1.f));
//*ConstFloat = 10.f; //因为是 const 所以无法直接赋值;
TsharedPtr<float> MutableFloat = ConstCastSharedPtr<float>(ConstFloat);
*MutableFlat = 100.f; //经过转换后就可以赋值了。