有没有一种方法可以包装使用移动语义而不复制对象的C++函数来返回对象(值不是指针或引用)?

例:

我有一个创建大对象A并使用其move构造函数返回它的函数:

class A {
public:
  A( A&& );
};

A createA()
{
  // creates A here
  return std::move(A);
}

在C++中,可以通过将A“移出”函数来避免复制A。现在,我需要使用boost python在Python中包装A和createA。据我所知,当一个函数返回一个对象时,boost python会自动调用A的副本构造函数。如果我不为A提供副本构造函数,则编译将失败。我的问题是是否存在无需复制即可将对象“移动”到Python世界的方法。

最佳答案

下面的代码应该工作

struct A
{
  A() = default;
  A(A&&) = default;
};

A createA()
{
  return {};
}

using bp = boost::python;


bp::class_<A, boost::noncopyable, std:: shared_ptr<A>> (
  "A", "noncopyable class A", bp::no_init);

bp::def(
  "createA",
  +[]()
  {
    return std::make_shared<A> (createA());
  });

关于c++ - 有没有一种方法可以使用move而不是copy语义在Python中包装函数返回值(对象)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19062657/

10-11 22:37
查看更多