如何移动TArray的内容

时间:2019-04-23 21:27:49

标签: 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;
}

如何实现与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());
}

2 个答案:

答案 0 :(得分:3)

drwxrwxrwx. 2 nfriberg nfriberg 40 Dec 19 22:16 cache -rw-r--r--. 1 nfriberg nfriberg 0 Dec 19 23:32 config.php drwxrwxr-x. 2 nfriberg nfriberg 40 Dec 19 22:16 files drwxr-xr-x. 2 nfriberg nfriberg 40 Dec 19 22:16 images/avatars/upload drwxrwxrwx. 2 nfriberg nfriberg 40 Dec 19 22:16 store 具有移动构造函数(即,签名为TArray的构造函数),如here所示。

因此TArray(TArray &&other)应该在std::move上工作,就像在TArray上工作一样。

答案 1 :(得分:2)

要完成the answer of Brennan

C ++ std-> UE4等效项:

  • std::vector-> TArray
  • std::unique_ptr-> TUniquePtr
  • std::make_unique-> MakeUnique
  • std::move-> MoveTempIfPossible(使用MoveTemp获取右值和const的编译时检查)

所以上面带有原生UE4类的代码示例看起来像

class MyObj {};
class A {
 public:
  A(TArray<TUniquePtr<MyObj>> v) : _v(MoveTemp(v)) {}
  auto GetV() { return _v[0].Get(); }

 private:
  TArray<TUniquePtr<MyObj>> _v;
};

int main() {
  auto o = MyObj{};
  auto v = TArray<TUniquePtr<MyObj>>();
  v.Add(MakeUnique<MyObj>(o));
  A a(MoveTemp(v));
  assert(a.GetV());
}