We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 9835670 commit f5ca973Copy full SHA for f5ca973
1 file changed
Framework/Core/include/Framework/DataAllocator.h
@@ -115,8 +115,28 @@ struct LifetimeHolder {
115
// invoke the callback early (e.g. for the Product<> case)
116
void release()
117
{
118
- if (ptr && callback) {
119
- callback(*ptr);
+ if (ptr) {
+ auto* released = ptr;
120
+ ptr = nullptr;
121
+ auto releaseCallback = std::move(callback);
122
+ if (releaseCallback) {
123
+ try {
124
+ releaseCallback(*released);
125
+ } catch (...) {
126
+ delete released;
127
+ throw;
128
+ }
129
130
131
132
133
+
134
+ // Delete the owned object without invoking the release callback. This is used
135
+ // when a partially filled object must be abandoned.
136
+ void discard()
137
+ {
138
139
+ callback = nullptr;
140
delete ptr;
141
ptr = nullptr;
142
}
0 commit comments