UE4___C++___智能指针——共享指针(TSharedPtr)

本文详细介绍了在Unreal Engine 4 (UE4) 中如何使用TSharedPtr智能指针,包括如何创建、赋值和访问成员。强调了TSharedPtr在游戏线程中的使用,以及它对UObject类的限制。还提到了避免性能问题的实践,如避免在函数内部创建临时实例,并指出使用TSharedPtr时应通过Get()方法获取值,而非直接使用箭头操作符,以防止程序崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值