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

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

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]);
	}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/676366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存