.1.弱指针也就是对 对象的弱引用,它不参与引用计数
2…弱指针它不会阻止对象被销毁,当对象被共享指针销毁了,弱指针会自动被清空
#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 TaskTweakPtr();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
TWeakPtr<TaskA> Task_e;
};
void ATaskActor::TaskTweakPtr()
{
TSharedPtr<TaskA> Task_ptr= MakeShareable(new TaskA());
TSharedRef<TaskA> Task_ref(new TaskA());
TWeakPtr<TaskA> TaskD(Task_ptr);//创建弱指针
TWeakPtr<TaskA> TaskK(Task_ref);//创建弱指针
Task_e = TaskD;//赋值
Task_e = TaskK;//赋值
Task_e = nullptr;//用完可以置成null ,不会阻止对象被销毁,对象依然存在
TSharedPtr<TaskA> NewTask(Task_e.Pin());//转换成共享指针
if (NewTask.IsValid())
{
NewTask->a;
}
}
一个弱指针的案例
//案例
class FTreeNode
{
TArray<TWeakPtr<FTreeNode>> Children;//树
TWeakPtr<FTreeNode> Parent;//节点
};
如果Children销毁,父类也会被销毁,Parent弱指针缓存了父类的指针,它不会阻止我们父类的销毁,当弱指针的对象被销毁了,弱指针自动知道的