2012-09-25 84 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