smart pointer refcount fix by @dean0x7d with slight modifications (fixes #471)
diff --git a/tests/test_issues.cpp b/tests/test_issues.cpp
index f5467cb..362ad44 100644
--- a/tests/test_issues.cpp
+++ b/tests/test_issues.cpp
@@ -290,7 +290,28 @@
for (auto &e : nothrows) l.append(py::cast(e));
return l;
});
-}
+
+ /// Issue #471: shared pointer instance not dellocated
+ class SharedChild : public std::enable_shared_from_this<SharedChild> {
+ public:
+ SharedChild() { print_created(this); }
+ ~SharedChild() { print_destroyed(this); }
+ };
+
+ class SharedParent {
+ public:
+ SharedParent() : child(std::make_shared<SharedChild>()) { }
+ const SharedChild &get_child() const { return *child; }
+
+ private:
+ std::shared_ptr<SharedChild> child;
+ };
+
+ py::class_<SharedChild, std::shared_ptr<SharedChild>>(m, "SharedChild");
+ py::class_<SharedParent, std::shared_ptr<SharedParent>>(m, "SharedParent")
+ .def(py::init<>())
+ .def("get_child", &SharedParent::get_child, py::return_value_policy::reference);
+};
// MSVC workaround: trying to use a lambda here crashes MSCV