@@ -28,6 +28,34 @@ struct uconsumer { // unique_ptr consumer
28
28
const std::unique_ptr<atyp> &rtrn_cref () const { return held; }
29
29
};
30
30
31
+ struct custom_deleter {
32
+ std::string trace_txt;
33
+
34
+ custom_deleter () = delete ;
35
+ explicit custom_deleter (const std::string &trace_txt_) : trace_txt(trace_txt_) {}
36
+
37
+ custom_deleter (const custom_deleter &other) { trace_txt = other.trace_txt + " _CpCtor" ; }
38
+
39
+ custom_deleter &operator =(const custom_deleter &rhs) {
40
+ trace_txt = rhs.trace_txt + " _CpLhs" ;
41
+ return *this ;
42
+ }
43
+
44
+ custom_deleter (custom_deleter &&other) {
45
+ trace_txt = other.trace_txt + " _MvCtorTo" ;
46
+ other.trace_txt += " _MvCtorFrom" ;
47
+ }
48
+
49
+ custom_deleter &operator =(custom_deleter &&rhs) {
50
+ trace_txt = rhs.trace_txt + " _MvLhs" ;
51
+ rhs.trace_txt += " _MvRhs" ;
52
+ return *this ;
53
+ }
54
+
55
+ void operator ()(atyp *p) const { std::default_delete<atyp>()(p); }
56
+ void operator ()(const atyp *p) const { std::default_delete<const atyp>()(p); }
57
+ };
58
+
31
59
// clang-format off
32
60
33
61
atyp rtrn_valu () { atyp obj{" rtrn_valu" }; return obj; }
@@ -65,26 +93,11 @@ std::string pass_udmp(std::unique_ptr<atyp, sddm> obj) { return "pass_udmp
65
93
std::string pass_udcp (std::unique_ptr<atyp const , sddc> obj) { return " pass_udcp:" + obj->mtxt ; }
66
94
67
95
68
- struct custom_deleter
69
- {
70
- std::string delete_txt;
71
- custom_deleter () = delete ;
72
- explicit custom_deleter (const std::string &delete_txt_) : delete_txt(delete_txt_) {}
73
- void operator ()(atyp* p) const
74
- {
75
- std::default_delete<atyp>()(p);
76
- }
77
- void operator ()(const atyp* p) const
78
- {
79
- std::default_delete<const atyp>()(p);
80
- }
81
- };
82
-
83
96
std::unique_ptr<atyp, custom_deleter> rtrn_udmp_del () { return std::unique_ptr<atyp, custom_deleter>(new atyp{" rtrn_udmp_del" }, custom_deleter{" udmp_deleter" }); }
84
97
std::unique_ptr<atyp const , custom_deleter> rtrn_udcp_del () { return std::unique_ptr<atyp const , custom_deleter>(new atyp{" rtrn_udcp_del" }, custom_deleter{" udcp_deleter" }); }
85
98
86
- std::string pass_udmp_del (std::unique_ptr<atyp, custom_deleter> obj) { return " pass_udmp_del:" + obj->mtxt + " ," + obj.get_deleter ().delete_txt ; }
87
- std::string pass_udcp_del (std::unique_ptr<atyp const , custom_deleter> obj) { return " pass_udcp_del:" + obj->mtxt + " ," + obj.get_deleter ().delete_txt ; }
99
+ std::string pass_udmp_del (std::unique_ptr<atyp, custom_deleter> obj) { return " pass_udmp_del:" + obj->mtxt + " ," + obj.get_deleter ().trace_txt ; }
100
+ std::string pass_udcp_del (std::unique_ptr<atyp const , custom_deleter> obj) { return " pass_udcp_del:" + obj->mtxt + " ," + obj.get_deleter ().trace_txt ; }
88
101
89
102
// clang-format on
90
103
0 commit comments