虛幻本身實現了一套智能指針系統,爲了跨平臺。node
指針:測試
佔用8個字節,4個字節的Object指針,4字節的引用計數控制器的指針,spa
引用計數控制器須要12字節,指針
一個C++的Object指針4字節,一個共享引用計數,4字節,一個弱引用計數,4字節。code
簡單用法以下,當sharepoint被銷燬或者執行 =nullptr 時候,就自動清理Class的內存。server
TSharedPtr<Class Name> sharepoint = Makeshareable(new Class Name());blog
引用:內存
弱引用:ast
// Allocate a new tree node TSharedRef<FTreeNode> NodeOwner( new FTreeNode() ); // Create a weak pointer to the new tree node TWeakPtr<FTreenode> NodeObserver( NodeOwner );
再多也沒什麼好說的,引擎裏面有測試的例子。class
例子的文件在
Engine\Source\Runtime\Core\Public\Templates\SharedPointerTesting.inl
順帶說一下,智能指針是不能指向UObject的,UObject本身已經實現了自動垃圾回收,當有UPROPERTY()的屬性指向他時候,不會析構,當沒有UPROPERTY屬性指向他時候,會自動析構,也就是說,當定義一個指針,可是沒有UPROPERTY()時候,指向了一個UObject,有可能這個Object已經析構了。這點要注意。
智能指針的cast。
TSharedPtr<ClassB> MyCurveButton= StaticCastSharedPtr<ClassA>(MyButton);