假设我有一个
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
数组吗?
您可以使用
Add
或 Emplace
将元素添加到 TArray
:
TArray<UObject*> Objects;
//...
Objects.Add(new UclassA);
或使用智能指针:
TArray<std::unique_ptr<UObject>> Objects;
//...
Objects.Add(std::make_unique<UclassA>());