c++ - 我應該存儲整個對像還是指向容器中的對象?

c++ - 我應該存儲整個對像還是指向容器中的對象?

從頭開始設計一個新系統。 我將使用STL來存儲某些長壽命對象的列表和地圖。 問題:我是否應該確保我的對象具有復制構造函數並將對象的副本存儲在我的STL容器中,還是自己管理生命期和範圍通常更好,並且只是將指向這些對象的指針存儲在我的STL容器中? 我意識到這在細節上略顯欠缺,但如果存在,我正在尋找“理論”更好的答案,因為我知道這兩種解決方案都是可行的。 玩指針的兩個非常明顯的缺點:1)我必須…


c++ - std:: auto_ptr或boost:: shared_ptr的pImpl成語?

當使用pImpl習語時,最好使用boost:shared_ptr而不是std::auto_ptr ? 我確信我曾經讀過升壓版本更友好? class Foo{public: Foo(); private: struct impl; std::auto_ptr<impl> impl_;}; class Foo{public: Foo(); private:…


c++ - 在模塊(exes和dll)之間使用STL(TR1)shared_ptr是否安全?

我知道在一個模塊中新建一個模塊並在另一個模塊中刪除它往往會導致VC++中的問題。 不同運行時間的問題。 混合使用靜態鏈接的運行時和/或動態鏈接的版本不匹配的模塊都可以把事情搞砸了,如果我沒有記錯的話。 但是,跨模塊使用VC++ 2008的std:: tr1:: shared_ptr是否安全? 由於只有一個版本的運行時甚至知道什麼是shared_ptr,靜態鏈接是我唯一的危險(現在..…


c++ - 智能指針+“這個”被認為是有害的?

在使用智能指針(如boost::shared_ptr的C++項目中,使用“ this ”的設計理念是什麼? 考慮到: 存儲任何智能指針中包含的原始指針供以後使用是很危險的。 你已經放棄了對象刪除的控制,並相信智能指針在正確的時間做到這一點。 非靜態類成員本質上使用this指針。 這是一個原始指針,不能改變。 如果我將它存儲在另一個變量中,或者將它傳遞給另一個可能存儲它的函數,或者將它綁定…



c++ - 完全線程安全的shared_ptr實現

有誰知道完全線程安全的shared_ptr實現嗎? 例如,boost的shared_ptr實現對於目標是線程安全的(refcounting),對於同時的shared_ptr實例讀取也是安全的,但是不能寫或讀/寫。(見Boost文檔,例子3,4和5)。 有shared_ptr實現是完全線程安全的shared_ptr實例嗎? 奇怪的是,助推文件說: shared_ptr對象提供了與內置…


c++ - 從shared_ptr獲得正常的ptr?

我有類似shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))我現在需要調用需要指向Type的指針的C樣式函數。 我如何從shared_ptr獲取它?…


c++ - 如何故意刪除boost:: shared_ptr?

我有很多boost::shared_ptr<MyClass>對象,並且在某些時候我故意想要delete其中的一些以釋放一些內存。(我知道那時我將永遠不再需要指向的MyClass對象。)我該怎麼做? 我想你不能只用我用get()得到的原始指針調用delete() get() 。 我在boost::shared_ptr看到了一個函數get_deleter(shared_ptr<T> const…


c++ - boost shared_ptr<XXX>線程安全嗎?

我有一個關於boost::shared_ptr<T> 。 有很多線程。 using namespace boost; class CResource{// xxxxxx}class CResourceBase{public: void SetResource(shared_ptr<CResource> res){m_Res=res;}…


c++ - 返回智能指針時的最佳做法

返回智能指針時的最佳做法是什麼,例如boost:: shared_ptr? 我應該通過標準返回智能指針,還是底層的原始指針? 我來自C#所以我傾向於總是返回智能指針,因為它感覺正確。 像這樣(跳過const-correctness更短的代碼): class X{public: boost::shared_ptr<Y> getInternal(){return m_internal…


c++ - 我怎麼知道誰擁有shared_ptr<>?

我在C++的應用程序中使用boost:: shared_ptr。 內存問題真的很嚴重,應用程序需要大量的內存。 但是,因為我將每個新對象放入shared_ptr中,所以當應用程序退出時,不會檢測到內存洩漏。 必須有一些像std::vector<shared_ptr<>>池的資源。 如何在調試時知道誰擁有shared_ptr? 一行一行地檢查代碼是很困難的。 太多的代碼... 非常感謝…




shared_ptr pointer unique_ptr smart reset example weak_ptr delete shared_ptr用法 std