2015-10-01 49 views
0

我閱讀RAII原則,有關於它的一些問題。實際上,它封裝了資源。所以,請考慮類std::string。它有一個constructorstring (const char* s);。所以,就像智能​​指針(例如template explicit shared_ptr (U* p);)它需要一個指向資源的指針然後管理它。對於string s這麼說是否正確?瞭解RAII對象

回答

4

像智能指針(例如shared_ptr)它需要一個指向資源,然後管理它。它是正確的

不太。 shared_ptr。就拿部分在到該指針分,而需要unique_ptr獨佔所有權的對象的所有權。智能指針,weak_ptr並不需要立即擁有,但它加入由shared_ptr S投資對象的觀察員,並允許共享所有權稍後嘗試。

的一點是,這些智能指針採取由他們給出的指針所指示的現有對象的所有權。

std::string(const char*),在另一方面,使得NUL終止的字符串的副本到指針所指向,它於是具有的獨佔所有權。構造函數的指針參數所指向的原始文本與構造的對象string沒有任何關聯;例如,對string的修改不會影響該文本。分別地,將std::string對象可以在內部的指針保持到動態分配緩衝器,存儲文本的副本,並且該緩衝器可被調整大小並更新(其他時間 - 爲足夠短的文本 - 它可被直接存儲在std::string對象作爲優化)。銷燬時,std::stringdelete[]任何內部指針仍在管理。他們從不泄漏記憶。