导入() 和 exect_file() 返回的对象所需的生存期是多少?



下面是这个例子的精简形式:http://www.boost.org/doc/libs/1_51_0/libs/python/doc/v2/exec.html#examples

从C++调用的 Python 函数,存储在文件中 script.py

def greet():
   return 'Hello from Python!'

执行 Python 函数的C++代码:

#include <iostream>
#include <string>
#include <boost/python.hpp>
using namespace boost::python;
void greet()
{ 
  object main = import("__main__");
  object global(main.attr("__dict__"));
  object result = exec_file("script.py", global, global);
  object greet = global["greet"];
  std::string message = extract<std::string>(greet());
  std::cout << message << std::endl;
}

我的问题是:我是否需要保持对象、全局对象和结果对象处于活动状态才能调用 greet

不,你没有。所有需要存活的东西都通过greet对象持有的引用来保持活动状态,您不需要将对象放在自己周围。

最新更新