2009-03-17 15 views

Odpowiedz

14

Z wyjątkiem już wspominanego TR1 shared_ptr, nie ma wskaźnika zliczanego odsyłającego w STL.

Proponuję użyć boost :: shared_ptr (pobudzenie pobierania będzie wystarczające, nie ma nic do skompilowania, jego implementacja jest tylko nagłówkowa).

Możesz także chcieć rzucić okiem na inteligentne wskaźniki z bibliotek Loki (ponownie, implementacja tylko w nagłówku).

Aby uzyskać przegląd dostępnych inteligentnych wskaźników, zobacz there.

+3

boost :: shared_ptr było inspiracją dla std :: tr1 :: shared_ptr. Następnie std :: tr1 :: shared_ptr staje się std :: shared_ptr w C++ 0x. –

9

Jeśli nie chcą/nie mogą korzystać Rozreklamują i kompilator implementuje TR1, można użyć shared_ptr (zapożyczoną z Boost):

#include <tr1/memory> 

... 

std::tr1::shared_ptr<Foo> ptr(new Foo); 

W przeciwnym razie nie ma inteligentnych wskaźników z wyjątkiem std::auto_ptr w wanilii STL.

1

W przypadku obiektów COM należy użyć CComPtr<>.

+1

CComPtr nie jest liczone odwołanie - sam obiekt bazowy jest. –

+0

Rzeczywiście tak jest. –

0

Istnieje alternatywa wdrożony przez pewien czas w STL PLUS, patrz na source forge

"STLplus was originally intended as a library to extend the STL by providing missing container data structures such as smart-pointers, matrices, trees and graphs."

3

Czas na marsze, w C++ 11:

std::shared_ptr 
std::weak_ptr 

itp

Powiązane problemy