如何移动TArray的内容

Roi*_*ton 3 c++ unreal-engine4

在 C++ 中我可以做

class A
{
public:
    A(std::vector<std::unique_ptr<int>> v) : _v(std::move(v)) {}
private:
    std::vector<std::unique_ptr<int>> _v;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现与ue4类型(TArrayTUniquePtr)类似的东西,即如何移动内容TArray


完整示例:

#include <cassert>
#include <memory>
#include <vector>
class MyObj {};
class A {
 public:
  A(std::vector<std::unique_ptr<MyObj>> v) : _v(std::move(v)) {}
  auto GetV() { return _v.front().get(); }

 private:
  std::vector<std::unique_ptr<MyObj>> _v;
};

int main() {
  auto v = std::vector<std::unique_ptr<MyObj>>();
  v.push_back(std::make_unique<MyObj>());
  A a(std::move(v));
  assert(a.GetV());
}
Run Code Online (Sandbox Code Playgroud)

Bre*_*ent 5

TArray有一个移动构造函数(即签名为 的构造函数),如此TArray(TArray &&other)所示。

因此std::move应该以TArraystd::vector.

  • `TUniquePtr` 还有一个移动构造函数:`TUniquePtr(TUniquePtr &amp;&amp; Other)` (2认同)