共享引用

不能为未初始化或分配为空的智能指针类型。

Windows
MacOS
Linux

共享引用 是一类强大且不可为空的 智能指针,其被用于引擎的 Uobject 系统外的数据对象。此意味无法重置共享引用、向其指定空对象,或创建空白引用。因此共享引用固定包含有效对象,甚至未拥有 IsValid 方法。在共享引用和 [共享指针](Shared Pointers) 间选择时,除非需要空白或可为空的对象,否则共享引用为优先选项。如需可能空白或可为空的引用,则应使用共享指针。

与标准的C++引用不同,可在创建后将共享引用重新指定到另一对象。

声明和初始化

共享引用不可为空,因此初始化需要数据对象。在无有效对象的情况下尝试创建的共享引用将不会编译,并尝试将共享引用初始化为空指针变量。

//创建新节点的共享引用
TSharedRef<FMyObjectType> NewReference = MakeShared<FMyObjectType>();

在无有效对象的情况下尝试创建的共享引用将不会编译:

//以下两者均不会编译:
TSharedRef<FMyObjectType> UnassignedReference;
TSharedRef<FMyObjectType> NullAssignedReference = nullptr;
//以下会编译,但如NullObject实际为空则断言。
TSharedRef<FMyObjectType> NullAssignedReference = NullObject;

共享指针和共享引用间的转换

共享指针和共享引用间的转换十分常见。共享引用会隐式转换为共享指针,并为新共享指针引用有效对象提供额外保证。使用普通语法处理转换:

TSharedPtr<FMyObjectType> MySharedPointer = MySharedReference;

如共享指针引用非空对象,即可使用 共享指针 函数 ToSharedRef,在共享指针中创建共享引用。尝试在空共享指针中创建共享引用,将导致程序断言。

//在取消引用前,确保共享指针为有效,避免潜在断言。
If (MySharedPointer.IsValid())
{
    MySharedReference = MySharedPointer.ToSharedRef();
}

比较

可测试共享引用彼此是否相等。在此情况下,相等表示引用相同对象。

TSharedRef<FMyObjectType> ReferenceA, ReferenceB;
if (ReferenceA == ReferenceB)
{
    // ...
}
标签

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见