2012-09-25 45 views
0

下面是本实施例的精简形式:http://www.boost.org/doc/libs/1_51_0/libs/python/doc/v2/exec.html#examplesimport()和exect_file()返回的对象的生命周期是多少?

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

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

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

#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; 
} 

我的问题是:我需要保持主要全球结果活着的物体能够呼叫迎接

回答

0

不,你不知道。所有需要活着的东西都会被greet对象所持有的参考文件保留,您不需要在自己周围放置物体。

+0

你能举一个资料来源吗? –

+0

@spaceknarf我用'main','global'和'result'对象对其进行了测试,它的工作原理和valgrind没有(额外的)投诉。 – James