2009-03-28 3 views
1

MFC에 코드를 작성하고 자동 포인터를 사용하고 싶습니다. 나는 같은 일을하는 것처럼 보이는 두 개의 다른 클래스를 보았습니다 : CAutoPtrstd::auto_ptr 두 가지 다른 구현에 대한 사람들의 생각은 무엇입니까?ATL CAutoPtr과 STL std :: auto_ptr의 차이점은 무엇입니까?

또한 나는 std::tr1::shared_ptr이 있음을 알고 있습니다. 유사한 shared_ptr이 ATL/MFC에 있습니까?

답변

2

CAutoPtrauto_ptr 모두 소유권 의미 전달과 같은 스마트 포인터 의미를 제공합니다. CAutoPtr은 COM을 사용하여 빌드 된 ATL 클래스입니다. 이것은 특정 OS에 대한 비표준 확장입니다. 반면에 auto_ptr은 표준 C++입니다. 이러한 객체의 컨테이너를 사용하려면 CAutoPtrArray 또는 CAutoPtrList을 사용해야합니다.

중요한 점은 auto_ptr_ref이라는 것이있어서 auto_ptr을 반환 값으로 반환 할 수 있다는 것입니다. CAutoPtr에는 아무 것도 없습니다.

auto_ptr은 C++ 0x에서 더 이상 사용되지 않습니다. 다음을해야한다면 unique_ptr을 사용하십시오. 이동 인식 컨테이너에서 사용할 수 있고 l 값의 안전하지 않은 암시 적 이동으로부터 안전을 확보 할 수 있습니다.

+2

좋은 답변입니다. 그러나, 내가 아는 한 CAutoPtr은 COM과 아무 관련이 없습니다. –

+0

CAutoPtr은 OS 또는 COM에만 국한된 것이 아니라 일반 C++입니다. –

0

CAutoPtr은 ATL 특이 적이다.

표준 : auto_ptr 및 CAutoPtr 모두 참조 횟수를 제공하지 않습니다. 둘 다 같은 기능을 갖고있는 것 같습니다. link text

ATL/MFC에는 shared_ptr이 없습니다. shared_ptr은 boost 라이브러리에 구현됩니다.

1

ATL/MFC에서 shared_ptr과 가장 가까운 것은 CComPtr입니다. COM 개체에서 사용하기위한 것이지만 AddRef/Release 참조 계산 방법이 포함 된 모든 클래스에서 사용할 수 있습니다.

관련 문제