shared_ptr은 어디에 있습니까?


103

나는 shared_ptr이 어디에 있는지 찾으려고 몇 시간 후에 지금 너무 실망합니다. 내가 보는 예제는 헤더를 포함하는 완전한 코드를 보여주지 shared_ptr않습니다. 간단하게 진술 std, tr1그리고 <memory>전혀 도움이되지 않는다! 부스트를 모두 다운로드했지만 여전히 표시되지 않습니다! 누군가 그것을 찾을 수있는 정확한 위치를 말함으로써 나를 도울 수 있습니까?

답답함을 풀어 주셔서 감사합니다!

편집 : 내 제목이 변경된 것을 봅니다. 미안합니다. 그래서 ... 또한 shared_ptr이 "C ++ 버전 의존적"이라는 것이 분명하지 않았기 때문입니다.-> 이것이 제가 환경을 말하지 않은 이유입니다-> 그래서 아마도 그것을 찾기가 그렇게 어려웠을 것입니다.

나는 MSVS2008에서 일하고 있습니다.

편집 2 : 이유를 모르겠지만 어디서나 shared_ptr을 찾는 동안 [memory]와 [boost / tr1 / memory.hpp] 및 [boost / tr1 / tr1 / memory]를 포함 시켰습니다. 물론, 나는 할 수 없었습니다. '티.

모든 응답에 감사드립니다.


3
컴파일러 및 부스트 버전 / 설치 경로와 같이 설정을 올바르게 설명 할 수 있다면 도움이 될 것입니다.
YeenFei

7
C ++ 0x shared_ptr를 사용하지 않는 한 표준의 일부가 아닙니다. 아직은 아니지만 일부는 표준으로 취급하지만 너무 일반적입니다.
Billy ONeal

4
당신의 환경이 7.5 비트 식기 세척기 칩을위한 GCC인지, 128 비트 메인 프레임의 독점 컴파일러인지 또는 XCode의 GCC 버전인지 알지 못한 채이 질문에 어떻게 답해야한다고 생각하십니까?
sbi

내가 직면 한 문제에 대한 정보를 추가하기 위해 .. C ++ 0x 표준으로 컴파일하려면 g ++의 인수로 "-std = c ++ 0x"를 추가해야합니다.
Mital Vora 2011

1
MSVC를 사용하는 경우 "#include <memory>"(gcc의 경우 검색을위한 CMake Find ()가 있으므로 전 처리기 정의를 <boost / shared_ptr.hpp> 대 <를 포함하도록 선언 할 수 있습니다. tr1 / shared_ptr.h> 첫 번째 선택은 tr1이 boost입니다. boost는 "hpp"이고 tr1은 ".h"입니다-Gentoo / Fedora / Debian에서 확인 됨-물론 #include <memory>도 있는지 확인하십시오. 별도로 메모리 관리)에 대한
HidekiAI

답변:


168

다음을 찾을 수있는 곳은 3 곳 이상입니다 shared_ptr.

  1. 당신의 C ++ 구현 지원은 C ++ 11 (또는 C ++ 11 적어도 경우 shared_ptr), 다음 std::shared_ptr에 정의됩니다 <memory>.

  2. 당신의 C ++ 구현 지원하는 C ++ TR1 라이브러리 확장한다면, std::tr1::shared_ptr가능성이있을 것 <memory>(마이크로 소프트 비주얼 C ++) 또는 <tr1/memory>(g ++의 된 libstdc ++). Boost는 사용할 수있는 TR1 구현도 제공합니다.

  3. 그렇지 않으면, 당신은 부스트 라이브러리와 사용을 얻을 수 있습니다 boost::shared_ptr에서 찾을 수 있습니다 <boost/shared_ptr.hpp>.


3
VS 2008의 경우 "기능 팩"을 얻었습니까? 아니면 SP1을 설치 했습니까? 그렇다면 여기 2 부가 적용되는 경우 네임 스페이스를 사용하십시오 tr1.
Kate Gregory

감사. 이것은 마술처럼 작동합니다. 이유는 모르겠지만 <memory>와 <boost / tr1 / memory.hpp>와 <boost / tr1 / tr1 / memory>를 포함하고 있었는데 어디서나 shared_ptr ..을 찾고 있었지만 물론 그럴 수 없었습니다. 다시 한 번 감사드립니다.
Jake는

잠시 C ++에서 물러 난 후 (clang v3.1에서) shared_ptr여전히 tr1네임 스페이스에 앉아 있다는 사실에 놀랐습니다 . 이것에 대한 어떤 생각?
hiwaylon 2012-08-08

3
@hiwaylon :로 컴파일하고 -std=c++11있습니까?
James McNellis

@JamesMcNellis Yessir, 불행히도 다른 의존성에 약간의 불행을 야기했고 계속할 수 없었습니다 (주어진 시간 제한). -std = c ++ 11 이 트릭 이라면 프로젝트로 돌아갈 수있을 때 확신을 가지고 계속할 수 있습니다. 감사합니다.
hiwaylon 2012-08-27


6

기능 팩 업데이트가있는 VS2008의 경우 shared_ptr은 네임 스페이스 std :: tr1에서 찾을 수 있습니다.

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

C:\Program Files\Boost\boost_1_40_0IDE 설정에 부스트 설치 경로 (예 : @ )를 추가 한 경우 :

#include <boost/shared_ptr.hpp>

3

your'e가 BOR를 찾고 있다면 부스트shared_ptr을 쉽게하여 답을 찾을 수 있었다 shared_ptr의 인터넷 검색 , 워드 프로세서에 대한 링크를 다음과 같은 완전한 작동 예를 당겨 .

어쨌든, 방금 해킹 한 최소한의 완전한 작업 예제가 있습니다.

#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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.