UE4C++小知识(十六)TArray的Emplace报错的原因

UE版本:4.26
这几天在写代码的时候,遇到了一个问题,就是我自建的继承自UObject的类,在使用TArray的Emplace时,出现了指针报空的问题。
调用示例如下:

class Test:public UObject
{
    
    

}

TArray<UTest*> Tests;
TempTest=NewObject<UTest>();
Tests.Emplace(Test);//报错行

报错代码:

	template <typename... ArgsType>
	FORCEINLINE SizeType Emplace(ArgsType&&... Args)
	{
    
    
		const SizeType Index = AddUninitialized(1);
		new(GetData() + Index) ElementType(Forward<ArgsType>(Args)...);//报错行
		return Index;
	}

在逐行调试之后,发现出现这种情况的原因,可能有两种:

1.继承自UObject的类未写构造函数,猜测无法默认构造。

2.重复添加自身元素到自身当中,导致可能申请内存失败。
for (int i = 0; i < Tests.Num(); ++i)
	{
    
    
		if (Tests[i])Tests.Emplace(Tests[i]);
	}

猜你喜欢

转载自blog.csdn.net/qq_41487299/article/details/124230821