@Rama Since C++11 returning arrays by value should be fine performance wise, the compiler will automatically use move semantics preventing the elements/memory from being copied.
@KieranChandler The error given does appear to be a little strange, but it would seem the reflection system wants you to use TSubclassOf rather than a raw UClass*, as BaderThanBad suggested. This is just a template wrapper around a UClass pointer, so you can use it in exactly the same way.