Ich werde es nicht wirklich empfehlen, aber Sie können ein Objekt zurückgeben, das implizit in einen rohen Zeiger konvertiert. Es wird es für eine kurze Dauer besitzen und löschen, wenn niemand es ergreift.
struct RelinquishOrDelete {
ExampleClass *_ptr;
operator ExampleClass*() { auto ret = _ptr; _ptr = nullptr; return ret; }
~RelinquishOrDelete() {
if(!_ptr) {
cerr << "returned object wasn't taken by a new owner\n";
delete _ptr;
}
}
};
Die Verwendung ist einfach. Es wird den Zeiger in diesem einfachen Fall packen und entpacken:
RelinquishOrDelete function()
{
ExampleClass *ptr = new ExampleClass();
ptr->doSomething();
return {ptr};
}
// ...
ExampleClass *ptr2 = function();
Aber natürlich wird es wahrscheinlich zu unerwartetem Verhalten führen, wenn in diesem absolut vernünftig Stück Code verwendet:
auto ptr3 = function();
Ein Smart-Pointer mit viel strengere Besitz Semantik ist wirklich der beste Ansatz.
Werfen Sie einen Blick [hier] (https://stackoverflow.com/questions/28294620/what-is-the-best-smart-pointer-return-type-for-a-factory-function). Der von Ihnen bereitgestellte Code scheint eine Factory-Funktion zu sein. –