2016-11-17 58 views
0

我是新來的圖書館,現在開始爲我的新項目開展探索工作。我想了解BOOST的scoped_ptr是如何工作的?到目前爲止,我們在所有代碼中都使用了原始指針,並且我主張使用SmartPointers來簡化內存管理。我們的編程不是純粹的C++語言,而是其集成的應用程序語言。例如,我們試圖瞭解如何將scoped_ptr初始化爲NULL,並將原始指針傳遞給應用程序API。考慮下面boost:scoped_ptr與使用char *作爲輸入類型的傳統C函數?

此代碼是從應用程序工具包中的API,它需要這樣

int SOME_API_FUNC(int obj, const char* prop, char** cValue); 

論據我不能改變的API,因爲它沒有公佈。

現在參數cValue是我們希望使用智能指針的地方,這樣內存管理就會自動進行,因爲API會爲其動態分配一些內存並分配一個值並返回。

我們試圖與scoped_ptr的聲明像這樣

boost::scoped_ptr<char*> pcValue(new char*()); 

和API中使用類似

SOME_API_FUNC(obj, prop,&*cValue); 

我的問題是,如果這cValue的malloc API的內部分配的內部那麼會發生什麼情況scoped_ptr正在使用刪除?請問刪除正確清理內存?如何驗證內存是否正確清理?

+0

您使用C的任何原因標籤爲C++問題?他們是不同的語言! – Olaf

回答

1

您應該使用智能指針和可定製的刪除器。

E.g.如果你需要釋放該指針與free代替delete(默認刪除器),嘗試:

struct free_deleter { 
    template <typename T> void operator()(T* p) const { 
     ::free(p); 
    } 
}; 
template <typename T> using malloc_ptr = std::unique_ptr<T, free_deleter>; 

現在你的確可以分配malloced指針和罰款:

std::unique_ptr<char[]> a(new char[100]); // ok, uses `delete[]` 
std::unique_ptr<MyType> b(new MyType("param")); // ok, uses `delete` 

malloc_ptr<char> legacy_buf(static_cast<char*>(::malloc(100))); //ok, uses `::free` 
相關問題