我不會真的推薦它,但你可以返回一個隱式轉換爲原始指針的對象。它將擁有它很短的時間,並刪除如果沒有人抓住它。
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)。您提供的代碼似乎是工廠功能。 –