2010-05-27 90 views
89

幾個小時後,我非常沮喪地試圖找到shared_ptr所在的位置。我看到的例子都沒有顯示包含shared_ptr(和working)標題的完整代碼。簡單地說,stdtr1<memory>根本沒有幫助!我已經下載了提升和所有,但它仍然不顯示!有人可以幫助我確切地知道在哪裏找到它嗎?shared_ptr在哪裏?

感謝您讓我發泄我的挫折!編輯: 我看到我的標題已被更改。對於那個很抱歉。 所以......這也是因爲我不清楚shared_ptr是「C++版本依賴」 - >這就是爲什麼我沒有說明我的環境 - >因此可能爲什麼我很難找到它。

我在MSVS2008上工作。

編輯2: 我不知道爲什麼,但我是包括[內存]和[升壓/ TR1/memory.hpp]和[升壓/ TR1/TR1 /內存雖然到處找shared_ptr的..當然,我不能。

感謝您的所有回覆。

+3

如果你可以正確說明你的設置,比如什麼編譯器和boost版本/安裝路徑 – YeenFei 2010-05-27 03:03:35

+7

除非你在C++ 0x上,'shared_ptr'不是標準的一部分。儘管它還沒有出現,但有些人會將其視爲標準,這很常見。 – 2010-05-27 03:03:58

+4

您認爲我們應該如何回答這個問題,而不知道您的環境是7.5位洗碟機芯片的GCC,128位大型機的專有編譯器還是XCode的GCC版本? – sbi 2010-05-27 06:45:53

回答

153

至少有三個地方,你可能會發現shared_ptr

  1. 如果您的C++實現支持C++ 11(或至少C++ 11 shared_ptr),那麼std::shared_ptr將在<memory>中定義。

  2. 如果你的C++實現支持C++ TR1庫擴展,然後std::tr1::shared_ptr可能會在<memory>(微軟的Visual C++)或<tr1/memory>(G ++的的libstdC++)。 Boost還提供了一個可以使用的TR1實現。

  3. 否則,您可以獲取Boost庫並使用boost::shared_ptr,它可以在<boost/shared_ptr.hpp>中找到。

+3

對於VS 2008,您是否獲得了「功能包」或者是否安裝了SP1?如果是這樣,那麼第2部分適用於你,使用命名空間'tr1'。 – 2010-05-27 12:12:32

+0

謝謝。這工作像魔術一樣。我不知道爲什麼,但我在包含的同時尋找shared_ptr。當然,我不能。再次感謝。 – Jake 2010-05-27 15:00:26

+0

簡單地從C++走開後,我驚訝地發現(在clang v3.1中)'shared_ptr'仍然位於'tr1'命名空間中。對此有何想法? – hiwaylon 2012-08-08 12:37:22

6

與功能包更新VS2008,shared_ptr的可以在名字空間std中找到:: TR1。

std::tr1::shared_ptr<int> MyIntSmartPtr = new int; 

,如果你有提升的安裝路徑(例如@C:\Program Files\Boost\boost_1_40_0

添加到您的IDE設置:

#include <boost/shared_ptr.hpp> 
4

如果傻冒尋找博爾boostshared_ptr,你可以很容易地通過googling shared_ptr找到了答案,下面的鏈接的文檔,並拉起了完整的工作示例如this

在任何情況下,這裏是一個簡約的完整的工作示例爲你,我只是砍死了:

#include <boost/shared_ptr.hpp> 

struct MyGizmo 
{ 
    int n_; 
}; 

int main() 
{ 
    boost::shared_ptr<MyGizmo> p(new MyGizmo); 
    return 0; 
} 

爲了使#include找頭,圖書館顯然需要在搜索路徑。在MSVC中,您可以在項目設置>配置屬性> C/C++>其他包含目錄中進行設置。在我的情況下,這是設置爲C:\Program Files (x86)\boost\boost_1_42