@@ -31,14 +31,36 @@ class MyObject : public Object {
31
31
int value;
32
32
};
33
33
34
+ class MyObject2 : public std ::enable_shared_from_this<MyObject2> {
35
+ public:
36
+ MyObject2 (int value) : value(value) {
37
+ std::cout << toString () << " constructor" << std::endl;
38
+ }
39
+
40
+ std::string toString () const {
41
+ return " MyObject2[" + std::to_string (value) + " ]" ;
42
+ }
43
+
44
+ virtual ~MyObject2 () {
45
+ std::cout << toString () << " destructor" << std::endl;
46
+ }
47
+
48
+ private:
49
+ int value;
50
+ };
51
+
34
52
// / Make pybind aware of the ref-counted wrapper type
35
53
PYBIND11_DECLARE_HOLDER_TYPE (T, ref<T>);
54
+ PYBIND11_DECLARE_HOLDER_TYPE (T, std::shared_ptr<T>);
36
55
37
56
Object *make_object_1 () { return new MyObject (1 ); }
38
57
ref<Object> make_object_2 () { return new MyObject (2 ); }
39
58
MyObject *make_myobject_4 () { return new MyObject (4 ); }
40
59
ref<MyObject> make_myobject_5 () { return new MyObject (5 ); }
41
60
61
+ MyObject2 *make_myobject2_1 () { return new MyObject2 (1 ); }
62
+ std::shared_ptr<MyObject2> make_myobject2_2 () { return std::make_shared<MyObject2>(2 ); }
63
+
42
64
void print_object_1 (const Object *obj) { std::cout << obj->toString () << std::endl; }
43
65
void print_object_2 (ref<Object> obj) { std::cout << obj->toString () << std::endl; }
44
66
void print_object_3 (const ref<Object> &obj) { std::cout << obj->toString () << std::endl; }
@@ -49,6 +71,11 @@ void print_myobject_2(ref<MyObject> obj) { std::cout << obj->toString() << std::
49
71
void print_myobject_3 (const ref<MyObject> &obj) { std::cout << obj->toString () << std::endl; }
50
72
void print_myobject_4 (const ref<MyObject> *obj) { std::cout << (*obj)->toString () << std::endl; }
51
73
74
+ void print_myobject2_1 (const MyObject2 *obj) { std::cout << obj->toString () << std::endl; }
75
+ void print_myobject2_2 (std::shared_ptr<MyObject2> obj) { std::cout << obj->toString () << std::endl; }
76
+ void print_myobject2_3 (const std::shared_ptr<MyObject2> &obj) { std::cout << obj->toString () << std::endl; }
77
+ void print_myobject2_4 (const std::shared_ptr<MyObject2> *obj) { std::cout << (*obj)->toString () << std::endl; }
78
+
52
79
void init_ex8 (py::module &m) {
53
80
py::class_<Object, ref<Object>> obj (m, " Object" );
54
81
obj.def (" getRefCount" , &Object::getRefCount);
@@ -69,5 +96,14 @@ void init_ex8(py::module &m) {
69
96
m.def (" print_myobject_3" , &print_myobject_3);
70
97
m.def (" print_myobject_4" , &print_myobject_4);
71
98
99
+ py::class_<MyObject2, std::shared_ptr<MyObject2>>(m, " MyObject2" )
100
+ .def (py::init<int >());
101
+ m.def (" make_myobject2_1" , &make_myobject2_1);
102
+ m.def (" make_myobject2_2" , &make_myobject2_2);
103
+ m.def (" print_myobject2_1" , &print_myobject2_1);
104
+ m.def (" print_myobject2_2" , &print_myobject2_2);
105
+ m.def (" print_myobject2_3" , &print_myobject2_3);
106
+ m.def (" print_myobject2_4" , &print_myobject2_4);
107
+
72
108
py::implicitly_convertible<py::int_, MyObject>();
73
109
}
0 commit comments