私は本当にそれをお勧めしませんが、暗黙的に生のポインタに変換するオブジェクトを返すことができます。それは短期間それを所有し、誰もそれをつかまえなければ削除します。
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;
}
}
};
使い方は簡単です。これは、パックと、この単純なケースでは、ポインタを解凍します:
RelinquishOrDelete function()
{
ExampleClass *ptr = new ExampleClass();
ptr->doSomething();
return {ptr};
}
// ...
ExampleClass *ptr2 = function();
しかし、このコードの完全に合理的な作品で使用した場合、もちろん、それは可能性が予期しない動作が発生します。
auto ptr3 = function();
スマートポインタとはるかに厳密な所有権セマンティクスは本当に最良のアプローチです。
[こちら](https://stackoverflow.com/questions/28294620/what-is-the-best-smart-pointer-return-type-for-a-factory-function)をご覧ください。あなたが提供したコードは、工場の機能のようです。 –