Разница между ATL CAutoPtr и STL std :: auto_ptr? - PullRequest
1 голос
/ 29 марта 2009

Я пишу некоторый код в MFC и хочу использовать авто указатели. Я встречал два разных класса, которые выглядят так, как будто они делают одно и то же: CAutoPtr и std::auto_ptr Что думают люди о двух разных реализациях?

Далее я знаю, что есть std::tr1::shared_ptr. Есть ли аналогичный shared_ptr в ATL / MFC?

Ответы [ 3 ]

2 голосов
/ 29 марта 2009

И CAutoPtr, и auto_ptr обеспечивают семантику интеллектуальных указателей, включая семантику передачи прав собственности. CAutoPtr - это класс ATL, созданный с использованием COM. Это нестандартное расширение для конкретной ОС. auto_ptr с другой стороны - это стандартный C ++. Если вы хотите использовать контейнер с такими объектами, вы должны использовать CAutoPtrArray или CAutoPtrList.

Важно отметить, что есть нечто, называемое auto_ptr_ref, которое позволяет вам возвращать auto_ptr s в качестве возвращаемого значения. С CAutoPtr.

такого не бывает.

auto_ptr устарела в C ++ 0x. Используйте unique_ptr, если вам нужно: вы можете использовать их в контейнерах, учитывающих перемещение, а также получить некоторую безопасность от небезопасных неявных перемещений l-значений.

1 голос
/ 29 марта 2009

Самая близкая вещь к shared_ptr в ATL / MFC - это CComPtr. Он предназначен для использования в COM-объектах, но может использоваться в любом классе, который включает методы подсчета ссылок AddRef / Release.

0 голосов
/ 29 марта 2009

CAutoPtr зависит от ATL.

std: auto_ptr и CAutoPtr оба не обеспечивают подсчет ссылок. Похоже, что оба имеют одинаковую функциональность. текст ссылки

Я полагаю, что в ATL / MFC нет shared_ptr. shared_ptr реализован в библиотеке boost.

...