2015-01-21 30 views
3

我有構造對象的功能,並且它作爲輸入到指針的引用:使用RAII與工廠作爲輸入的基準的指針

void generator(Object*&)

和我把它爲:

Object* obj = nullptr; 
generator(obj); 

... 
use obj 
... 
delete obj; 

正如你所看到的,用戶負責銷燬obj。有沒有更好的方法來使用智能指針或其他解決方案來避免手動內存管理?

我無法更改generator函數。

+0

只寫一個包裝器'generator'。將其稱爲'generator()' – sbabbi 2015-01-21 09:22:40

回答

6

即使你不能修改generator :(,你仍然可以使用智能指針:

Object* obj = nullptr; 
generator(obj); 
std::unique_ptr<Object> raii_obj(obj); 
... 
use obj/raii_obj 
... 
// auto delete raii_obj. 

你甚至可以在一個函數把它包:

std::unique_ptr<Object> make_object() 
{ 
    Object* obj = nullptr; 
    generator(obj); 
    return std::unique_ptr<Object>(obj); 
} 
+0

有沒有辦法在不聲明原始指針的情況下直接使用智能指針? – 2015-01-21 08:30:35

+1

不,你不能修改'std :: unique_ptr'直接。 – Jarod42 2015-01-21 08:50:04