• Jason Rhinelander's avatar
    Make unique_ptr's with non-default deleters work · a6495af8
    Jason Rhinelander authored
    Currently pybind11 only supports std::unique_ptr<T> holders by default
    (other holders can, of course, be declared using the macro).  PR #368
    added a `py::nodelete` that is intended to be used as:
    
        py::class_<Type, std::unique_ptr<Type, py::nodelete>> c("Type");
    
    but this doesn't work out of the box.  (You could add an explicit
    holder type declaration, but this doesn't appear to have been the
    intention of the commit).
    
    This commit fixes it by generalizing the unique_ptr type_caster to take
    both the type and deleter as template arguments, so that *any*
    unique_ptr instances are now automatically handled by pybind.  It also
    adds a test to test_smart_ptr, testing both that py::nodelete (now)
    works, and that the object is indeed not deleted as intended.
    a6495af8
test_smart_ptr.cpp 5.88 KB