You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
33 lines
3.1 KiB
Plaintext
33 lines
3.1 KiB
Plaintext
INTSourceChangelist:3681055
|
||
䄀瘀愀椀氀愀戀椀氀椀琀礀㨀倀甀戀氀椀挀ഀഀ
|
||
Title:共享引用
|
||
䌀爀甀洀戀猀㨀─刀伀伀吀─Ⰰ 倀爀漀最爀愀洀洀椀渀最Ⰰ 倀爀漀最爀愀洀洀椀渀最⼀唀渀爀攀愀氀䄀爀挀栀椀琀攀挀琀甀爀攀⼀匀洀愀爀琀倀漀椀渀琀攀爀䰀椀戀爀愀爀礀ഀഀ
|
||
Description:不能取消初始化或指定为空的智能指针类型。
|
||
吀礀瀀攀㨀爀攀昀攀爀攀渀挀攀ഀഀ
|
||
Version: 4.9
|
||
倀愀爀攀渀琀㨀倀爀漀最爀愀洀洀椀渀最⼀唀渀爀攀愀氀䄀爀挀栀椀琀攀挀琀甀爀攀⼀匀洀愀爀琀倀漀椀渀琀攀爀䰀椀戀爀愀爀礀ഀഀ
|
||
Order:
|
||
吀愀最猀㨀倀爀漀最爀愀洀洀椀渀最ഀഀ
|
||
|
||
嬀吀伀䌀⠀猀琀愀爀琀㨀㈀⤀崀ഀഀ
|
||
|
||
⨀⨀焀ꭑᕎ⡟⩵⨀ ⼀f⩎幎穓葺煶ꭑݎ衣ʔ<EFBFBD>ྏ獡䁔౷ꣿൠ﵎ᮀ禍穞絺葶煶ꭑᕎ⡟忿ൎ﵎ڀ穜ݺ驣<EFBFBD>煾ꭑᕎ⡟<EFBFBD>এꥧ蹒ꡎᙠ饿襦桛ő牦쁞葑Ŏ౸㩖ꡎ卷뾐曆慛⾌襦桛葑ɶ謰鹎൛上,就像共享指针一样,共享引用甚至没有 **IsValid()** 方法,因为它们始终有效。我们建议您尽量使用共享引用,而不是共享指针。
|
||
ഀഀ
|
||
如果您需要空白/可空引用,应使用[](Programming/UnrealArchitecture/SmartPointerLibrary/SharedPointer)。
|
||
ഀഀ
|
||
(#declarationandinitialization)
|
||
ഀ
|
||
## 声明和初始化
|
||
ഀഀ
|
||
共享引用总是使用有效的对象进行初始化,如果未经初始化,则无法加以声明。
|
||
ഀഀ
|
||
创建新的共享引用的示例:
|
||
ഀഀ
|
||
// 创建对一个新的节点的共享引用
|
||
ऀ吀匀栀愀爀攀搀刀攀昀㰀䘀吀爀攀攀一漀搀攀㸀 一漀搀攀刀攀昀⠀ 渀攀眀 䘀吀爀攀攀一漀搀攀⠀⤀ ⤀㬀ഀഀ
|
||
|
||
<EFBFBD>量൛䅎롑⢋⩗ᵧ쭒ᙙ煓ꭑ鑎⡞ᙵ⩢ݧ驣㩛穎葺앶땠ᵎ한๘熋ꭑᕎ⡟᩵ഀ
|
||
|
||
ऀ吀匀栀愀爀攀搀刀攀昀㰀唀䈀漀漀氀㸀 䔀洀瀀琀礀䈀漀漀氀㬀ऀऀऀ⼀⼀ ൜ᩎ<EFBFBD>䲏ᚈ텿Ƌǿഀ
|
||
|
||
⠀⌀猀栀愀爀攀搀爀攀昀攀爀攀渀挀攀甀猀愀最攀⤀ഀ
|
||
|
||
⌀⌀ 焀ꭑᕎ⡟葵罶⡏൵ഀ
|
||
|
||
⠀❗ᩙ灙앥땠翿⡏煵ꭑݎ衣ດ罎⡏煵ꭑᕎ⡟艵繁Q饎ʏരഀ
|
||
|
||
ऀ⼀⼀ ᬀ禍丹[⩎끎葥艶릂葰煶ꭑᕎ⡟൵ഀ
|
||
TSharedRef<FTreeNode> NodeRef( new FTreeNode() );
|
||
ഀഀ
|
||
NodeRef->ListChildren();
|
||
ऀ⠀ ⨀一漀搀攀刀攀昀 ⤀⸀䰀椀猀琀䌀栀椀氀搀爀攀渀⠀⤀㬀ഀഀ
|
||
const FTreeNode& NodeVar = NodeRef.Get();
|
||
ഀഀ
|
||
需要再次指出的是,主要区别在于您不能将共享指针设置为空:
|
||
ഀഀ
|
||
TSharedRef<FTreeNode> Node = null; // 将不会进行编译!!
|
||
ഀഀ
|
||
(#pointerandreferenceconversion)
|
||
ഀ
|
||
### 指针和引用之间的转换
|
||
ഀഀ
|
||
共享引用隐式转换为共享指针,因此从引用创建指针总是安全的,也就是说,您可以将共享引用指定给共享指针,或者将共享引用传递给需要共享指针的方法。
|
||
ഀഀ
|
||
TSharedPtr<FTreeNode> SomeNodePtr = NodeRef;
|
||
ഀഀ
|
||
然而,从指针进行转换可能并不安全,并且您必须使用 **ToSharedRef()** 函数显式执行转换。
|
||
ഀഀ
|
||
// 显式引用一个指针。如果该指针无效,则执行断言!
|
||
ऀ一漀搀攀刀攀昀 㴀 匀漀洀攀一漀搀攀倀琀爀⸀吀漀匀栀愀爀攀搀刀攀昀⠀⤀㬀ഀഀ
|
||
|
||
嬀刀䔀䜀䤀伀一㨀渀漀琀攀崀ഀഀ
|
||
与使用C++指针的*运算符类似,如果对象无效,使用ToSharedRef()将执行断言。
|
||
嬀⼀刀䔀䜀䤀伀一崀ഀഀ
|