#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "TaskActor.generated.h"
class TaskA
{
public:
int32 a;
};
UCLASS()
class SLATEPROJECT_API ATaskActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ATaskActor();
void TaskAA();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
TSharedPtr<TaskA> Task_a;
};
void ATaskActor::TaskAA()
{
Task_a = MakeShareable(new TaskA());
if (Task_a.IsValid()|| Task_a.Get())
{
Task_a.Get()->a;
Task_a->a;
Task_a.Reset();
}
}
TSharedPtr注意事项
1.不能引用继承自UObject 的类 因为这个连个都能释放,所以不兼容
2.必须是游戏线程
3.共享指针支持NUll的
4.共享指针不能复制的,最多是引用技术
5.因为共享指针不能复制的,再应用TArray<> 注意 因为TArray会把类或者指针做一个复制
6.注意不要在一个函数的生命周期内声明一个临时指针,因为这很耗性能
7.一般用Task_a.Get()获取值
/**
* Returns the object referenced by this pointer, or nullptr if no object is reference
*
* @return The object owned by this shared pointer, or nullptr
*/
FORCEINLINE ObjectType* Get() const
{
return Object;
}
8.Task_a->直接获取的会产生断言造成程序崩溃
/**
* Arrow operator returns a pointer to the object this shared pointer references
*
* @return Returns a pointer to the object referenced by this shared pointer
*/
FORCEINLINE ObjectType* operator->() const
{
check( IsValid() );
return Object;
}