介绍
在UE4中可以使用C++的智能指针,虽然UE4自身已经对UObject及其派生对象有了较好的垃圾回收机制,但开发者还是会遇到使用指针管理对象的时候。我对其使用方法和类型做了一些简单总结。
智能指针的主要类型分为:TSharedPtr, TSharedRef, TWeakPtr, TAutoPtr。
其特性主要总结为几点:
- 类似常规C++指针;
- 可防止内存溢出;
- 有线程安全机制;
- 可虚拟化任何对象;
- 负载极小,内存占用仅是原生C++指针的两倍。
使用方式
这里主要针对TSharedPtr(共享指针)的使用进行介绍
声明一个测试类为MyClass:
Class MyClass
{
public:
int values;
};
分配及初始化:
TSharedPtr<MyClass> emptySharedClass; //这是一个空的共享指针
TSharedPtr<MyClass> firstSharedObject(new MyClass()); //声明并初始化了一个共享指针
复制指针:
//当复制了一个共享指针,那引用数就会增加
TSharedPtr<MyClass> anotherObject = firstSharedObject;
在内存中检查一个共享指针的引用数:
firstSharedObject.GetSharedReferenceCount();
三种方法解除引用:
firstSharedObject->values;
firstSharedObject.Get()->values;
(*firstSharedObject).values;
检查指针有效性:
firstSharedObject.IsValid()
或者:
firstSharedObject.Get() != nullptr