在虚幻引擎中动态创建TArray

问题描述 投票:0回答:1

假设我有一个

UObject
类,其中
TArray
保存为
UPROPERTY
。有没有办法动态创建
TArray
然后将
Objects
设置为新创建的数组(参见下面的代码)?

UCLASS(BlueprintType, Blueprintable)
class SOME_API UClassA : public UObject
{
    GENERATED_BODY()

public:    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    TArray<UObject*> Objects;    
};

NewObject
尝试创建
TArray

时似乎会引发编译错误
UClassA* ObjA = NewObject<UclassA>();
TArray<UObject*>* NewArray = NewObject<TArray<UObject*>>(); // this raises compilation error
ObjA->Objects = *NewArray;

错误:

Error C2039 : 'StaticClass': is not a member of 'TArray<UObject *,FDefaultAllocator>'
Reference C2039 : see declaration of 'TArray<UObject *,FDefaultAllocator>'
Reference C2039 : see reference to function template instantiation 'T *NewObject<TArray<UObject *,FDefaultAllocator>>(UObject *)' being compiled
          with
          [
              T=TArray<UObject *,FDefaultAllocator>
          ]

我可以用简单的 c++ 创建

TArray
new
这可行吗?垃圾收集器会跟踪新数组而不是构造函数中创建的
Objects
数组吗?

c++ unreal-engine4 unreal-engine5 unreal
1个回答
0
投票

您可以使用

Add
Emplace
将元素添加到
TArray
:

TArray<UObject*> Objects;
//...
Objects.Add(new UclassA);

或使用智能指针:

TArray<std::unique_ptr<UObject>> Objects;
//...
Objects.Add(std::make_unique<UclassA>());
© www.soinside.com 2019 - 2024. All rights reserved.