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