[C++-sig] Segmentation Fault with Boost.Python and Inheritance

Gabe Rives-Corbett gabe at gaberivescorbett.com
Thu May 17 23:42:52 CEST 2012


Hello, 

I'm getting a seg fault when trying to call a virtual method on a base class from python.  Code is below:

#include <memory>

namespace boost { 
  template<class T> const T* get_pointer(const std::shared_ptr<T>& ptr) 
  {
    return ptr.get();
  }

  template<class T> T* get_pointer(std::shared_ptr<T>& ptr)
  {
    return ptr.get();
  }
}

#include <Python.h>
#include <boost/python.hpp>

namespace bp = boost::python;

class MyBase
{
public:
MyBase(){}
virtual ~MyBase(){}

virtual void baseTest() { printf("base test\n"); }
};

class MyDerived : public MyBase
{
public:
MyDerived() {}
virtual ~MyDerived(){}

void derivedTest() { printf("derived test\n"); }
};

BOOST_PYTHON_MODULE(PythonTest)
{
bp::class_<MyBase, std::shared_ptr<MyBase>>("MyBase")
.def("baseTest", &MyBase::baseTest);

bp::class_<MyDerived, bp::bases<MyBase>, std::shared_ptr<MyDerived>>("MyDerived")
.def("derivedTest", &MyDerived::derivedTest);

bp::implicitly_convertible<std::shared_ptr<MyDerived>, std::shared_ptr<MyBase>>();
}

Does it have to do with using std::shared_ptr for storage?  If so is there a way around this?  Any help is appreciated.   

-- 
Gabe Rives-Corbett

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20120517/c42e81a8/attachment.html>


More information about the Cplusplus-sig mailing list