4
CPP:升壓Python對象生命週期
#include <boost/python.hpp>
using namespace boost;
using namespace boost::python;
struct Foo
{
virtual ~Foo() {}
virtual void Print() = 0;
};
struct FooWrap : Foo, wrapper<Foo>
{
void Print()
{
this->get_override("Print")();
}
};
void ProcessFoo(Foo *obj) { obj->Print(); }
BOOST_PYTHON_MODULE(hello_ext)
{
class_<FooWrap, boost::noncopyable>("Foo")
.def("Print", pure_virtual(&Foo::Print));
def("ProcessFoo", &ProcessFoo);
}
蟒蛇:
import hello_ext
class NewFoo(hello_ext.Foo):
def Print(self):
print 'Print call'
hello_ext.ProcessFoo(NewFoo())
一切正常,沒有從ProcessFoo
通話Print call
文本。但是,我要全部通過指針存儲ProcessFoo
,如:
std::vector<Foo*> data;
void ProcessFoo(Foo *obj) { data.push_back(obj); obj->Print(); }
後從函數指針退出變得無效,我不能從矢量使用它。使指針的壽命更長的最佳方法是什麼?使用共享指針或告訴python不要刪除對象(如果它刪除它)?
你有'Foo&'在'std :: pair'嗎? – 2016-03-15 19:56:24
是的,你可以擁有。它不過是一個「指針」。但是您必須確保在刪除後不訪問對象,這是通過增加和存儲引用(對象)來確保的。 – Sven 2016-03-16 09:06:32