Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在module.reload()之后保持py::objects的活动状态 重新加载模块 MyObMedio >所有对象都被删除,但我想从C++中删除对象。如何防止Python删除对象 #include <iostream> #include <pybind11/embed.h> class Obj{ ~Obj(){std::cout << "deleted" << std::endl;} }; PYBIND11_EMBEDDED_MODULE(module_obj, m) { py::class_<Obj>(m,"Obj"); } /* #my_module.py import module_obj o = module_obj.Obj() */ py::scoped_interpreter intpr; auto my_module = py::module::import("my_module") auto* o = my_module.attr("o").cast<Obj*>() my_module.reload() // now o is deleted, how to prevent it? #包括 #包括 类Obj{~():{STD::CUT< P>需要保持代码的“ o < /Cord>对象在零以上”。最简单的方法是在C++侧生成 py::Obj/_C++_Pybind11 - Fatal编程技术网 需要保持代码的“ o < /Cord>对象在零以上”。最简单的方法是在C++侧生成 py::Obj/,c++,pybind11,C++,Pybind11" /> 需要保持代码的“ o < /Cord>对象在零以上”。最简单的方法是在C++侧生成 py::Obj/,c++,pybind11,C++,Pybind11" />

如何在module.reload()之后保持py::objects的活动状态 重新加载模块 MyObMedio >所有对象都被删除,但我想从C++中删除对象。如何防止Python删除对象 #include <iostream> #include <pybind11/embed.h> class Obj{ ~Obj(){std::cout << "deleted" << std::endl;} }; PYBIND11_EMBEDDED_MODULE(module_obj, m) { py::class_<Obj>(m,"Obj"); } /* #my_module.py import module_obj o = module_obj.Obj() */ py::scoped_interpreter intpr; auto my_module = py::module::import("my_module") auto* o = my_module.attr("o").cast<Obj*>() my_module.reload() // now o is deleted, how to prevent it? #包括 #包括 类Obj{~():{STD::CUT< P>需要保持代码的“ o < /Cord>对象在零以上”。最简单的方法是在C++侧生成 py::Obj/

如何在module.reload()之后保持py::objects的活动状态 重新加载模块 MyObMedio >所有对象都被删除,但我想从C++中删除对象。如何防止Python删除对象 #include <iostream> #include <pybind11/embed.h> class Obj{ ~Obj(){std::cout << "deleted" << std::endl;} }; PYBIND11_EMBEDDED_MODULE(module_obj, m) { py::class_<Obj>(m,"Obj"); } /* #my_module.py import module_obj o = module_obj.Obj() */ py::scoped_interpreter intpr; auto my_module = py::module::import("my_module") auto* o = my_module.attr("o").cast<Obj*>() my_module.reload() // now o is deleted, how to prevent it? #包括 #包括 类Obj{~():{STD::CUT< P>需要保持代码的“ o < /Cord>对象在零以上”。最简单的方法是在C++侧生成 py::Obj/,c++,pybind11,C++,Pybind11,您需要保持代码< o >代码>对象在零以上。最简单的方法是在C++侧生成 py::Obj/ #include <iostream> #include <pybind11/embed.h> namespace py=pybind11; class Obj { public: ~Obj() { std::cout << "deleted" << std::endl; } }; PYBIND11_EMBEDDED_MODULE(m

您需要保持代码< <代码> o >代码>对象在零以上。最简单的方法是在C++侧生成<代码> py::Obj/<代码(或,在Python端等效地创建对象)< /P>
#include <iostream>
#include <pybind11/embed.h>

namespace py=pybind11;

class Obj {
public:
  ~Obj() {
    std::cout << "deleted" << std::endl;
  }
};

PYBIND11_EMBEDDED_MODULE(my_module, m) {
  py::class_<Obj>(m, "Cat")
      .def(py::init());
}

int main() {
  py::scoped_interpreter intpr;
  std::cout << "Loading... " << std::endl;
  auto my_module = py::module::import("my_module");
  std::cout << "Load complete. " << std::endl;

  py::object o = my_module.attr("Cat")(); // create new cat, automatically increases/decreases ref count 
  std::cout << "Reloading... " << std::endl;
  my_module.reload(); // now o is deleted, how to prevent it?
  std::cout << "Reload complete. " << std::endl;
}
Loading... 
Load complete. 
Reloading... 
Reload complete. 
deleted