与Boost.Python,这可以通过使用^{}来管理对象的生存期来实现。这通常是通过在^{}中公开C++类型时指定^ {< CD2> }来完成的。然而,Boost.Python通常使用boost::shared_ptr提供所需的功能。在本例中,^{}类型支持转换。在
下面是一个完整的例子:#include
#include
#include
#include
#include
class Base
{
public:
virtual ~Base() { std::cout << "C++ deleted" << std::endl; }
virtual void virtFunc() {}
void rmFunc()
{
std::cout << "Precall" << std::endl;
virtFunc();
std::cout << "Postcall" << std::endl;
}
};
/// @brief Wrap Base to allow for python derived types to override virtFunc.
struct BaseWrap
: Base,
boost::python::wrapper
{
virtual ~BaseWrap() { std::cout << "Wrap deleted" << std::end