Skip to content

Commit d9c13f1

Browse files
committed
Transferring additional comments from PR #2875.
1 parent 1bafd5d commit d9c13f1

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

tests/test_smart_ptr.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,9 @@ class type_caster<std::shared_ptr<HeldByDefaultHolder>>
305305
#endif
306306

307307
TEST_SUBMODULE(smart_ptr, m) {
308+
// Please do not interleave `struct` and `class` definitions with bindings code,
309+
// but implement `struct`s and `class`es in the anonymous namespace above.
310+
// This helps keeping the smart_holder branch in sync with master.
308311

309312
// test_smart_ptr
310313

@@ -361,11 +364,13 @@ TEST_SUBMODULE(smart_ptr, m) {
361364
return good;
362365
});
363366

367+
// test_unique_nodelete
364368
py::class_<MyObject4, std::unique_ptr<MyObject4, py::nodelete>>(m, "MyObject4")
365369
.def(py::init<int>())
366370
.def_readwrite("value", &MyObject4::value)
367371
.def_static("cleanup_all_instances", &MyObject4::cleanupAllInstances);
368372

373+
// test_unique_deleter
369374
py::class_<MyObject4a, std::unique_ptr<MyObject4a, py::nodelete>>(m, "MyObject4a")
370375
.def(py::init<int>())
371376
.def_readwrite("value", &MyObject4a::value)
@@ -374,10 +379,12 @@ TEST_SUBMODULE(smart_ptr, m) {
374379
py::class_<MyObject4b, MyObject4a, std::unique_ptr<MyObject4b>>(m, "MyObject4b")
375380
.def(py::init<int>());
376381

382+
// test_large_holder
377383
py::class_<MyObject5, huge_unique_ptr<MyObject5>>(m, "MyObject5")
378384
.def(py::init<int>())
379385
.def_readwrite("value", &MyObject5::value);
380386

387+
// test_shared_ptr_and_references
381388
using A = SharedPtrRef::A;
382389
py::class_<A, std::shared_ptr<A>>(m, "A");
383390
py::class_<SharedPtrRef, std::unique_ptr<SharedPtrRef>>(m, "SharedPtrRef")
@@ -391,6 +398,7 @@ TEST_SUBMODULE(smart_ptr, m) {
391398
.def("set_ref", [](SharedPtrRef &, const A &) { return true; })
392399
.def("set_holder", [](SharedPtrRef &, std::shared_ptr<A>) { return true; });
393400

401+
// test_shared_ptr_from_this_and_references
394402
using B = SharedFromThisRef::B;
395403
py::class_<B, std::shared_ptr<B>>(m, "B");
396404
py::class_<SharedFromThisRef, std::unique_ptr<SharedFromThisRef>>(m, "SharedFromThisRef")
@@ -405,14 +413,17 @@ TEST_SUBMODULE(smart_ptr, m) {
405413
.def("set_ref", [](SharedFromThisRef &, const B &) { return true; })
406414
.def("set_holder", [](SharedFromThisRef &, std::shared_ptr<B>) { return true; });
407415

416+
// Issue #865: shared_from_this doesn't work with virtual inheritance
408417
static std::shared_ptr<SharedFromThisVirt> sft(new SharedFromThisVirt());
409418
py::class_<SharedFromThisVirt, std::shared_ptr<SharedFromThisVirt>>(m, "SharedFromThisVirt")
410419
.def_static("get", []() { return sft.get(); });
411420

421+
// test_move_only_holder
412422
py::class_<C, custom_unique_ptr<C>>(m, "TypeWithMoveOnlyHolder")
413423
.def_static("make", []() { return custom_unique_ptr<C>(new C); })
414424
.def_static("make_as_object", []() { return py::cast(custom_unique_ptr<C>(new C)); });
415425

426+
// test_holder_with_addressof_operator
416427
using HolderWithAddressOf = shared_ptr_with_addressof_operator<TypeForHolderWithAddressOf>;
417428
py::class_<TypeForHolderWithAddressOf, HolderWithAddressOf>(m, "TypeForHolderWithAddressOf")
418429
.def_static("make", []() { return HolderWithAddressOf(new TypeForHolderWithAddressOf); })
@@ -422,16 +433,20 @@ TEST_SUBMODULE(smart_ptr, m) {
422433
.def("print_object_3", [](const HolderWithAddressOf &obj) { py::print(obj.get()->toString()); })
423434
.def("print_object_4", [](const HolderWithAddressOf *obj) { py::print((*obj).get()->toString()); });
424435

436+
// test_move_only_holder_with_addressof_operator
425437
using MoveOnlyHolderWithAddressOf = unique_ptr_with_addressof_operator<TypeForMoveOnlyHolderWithAddressOf>;
426438
py::class_<TypeForMoveOnlyHolderWithAddressOf, MoveOnlyHolderWithAddressOf>(m, "TypeForMoveOnlyHolderWithAddressOf")
427439
.def_static("make", []() { return MoveOnlyHolderWithAddressOf(new TypeForMoveOnlyHolderWithAddressOf(0)); })
428440
.def_readwrite("value", &TypeForMoveOnlyHolderWithAddressOf::value)
429441
.def("print_object", [](const TypeForMoveOnlyHolderWithAddressOf *obj) { py::print(obj->toString()); });
430442

443+
// test_smart_ptr_from_default
431444
py::class_<HeldByDefaultHolder, std::unique_ptr<HeldByDefaultHolder>>(m, "HeldByDefaultHolder")
432445
.def(py::init<>())
433446
.def_static("load_shared_ptr", [](std::shared_ptr<HeldByDefaultHolder>) {});
434447

448+
// test_shared_ptr_gc
449+
// #187: issue involving std::shared_ptr<> return value policy & garbage collection
435450
py::class_<ElementBase, std::shared_ptr<ElementBase>>(m, "ElementBase");
436451

437452
py::class_<ElementA, ElementBase, std::shared_ptr<ElementA>>(m, "ElementA")

0 commit comments

Comments
 (0)