Есть ли общий интеллектуальный указатель, такой как auto_ptr и shared_ptr, для которого не нужен C ++ 0x?

Мне нужен умный указатель без подсчета ссылок, который может объединить некоторые полезные аспекты auto_ptr и shared_ptr . Я думаю, что C ++ 0x unique_ptr - это в конечном итоге то, что мне нужно, но мне нужно что-то, что будет компилироваться в Visual Studio 2008 и Xcode (gcc 4.2).

Мне нужны следующие функции:

  • Используется в фабричных методах, так что право собственности передается при копировании (например, auto_ptr)
  • Поддерживает release () (например, auto_ptr)
  • Может использоваться с предварительным объявлением (например, shared_ptr)

Итак, я полагаю, что это действительно лучший auto_ptr . Есть ли что-нибудь, что делает это в ускоренном режиме или где-то еще (примечание: у меня нет времени обдумывать Локи)? Или я должен просто использовать свой собственный?

РЕДАКТИРОВАТЬ: Я только что прочитал больше о auto_ptr - похоже, вы можете использовать его с предварительными объявлениями, если вы убедитесь, что заголовок класса включен в каждый файл .cpp, который ссылается на заголовок с помощью интеллектуального указателя (например, см. GotW ). У кого-нибудь есть какие-то общие советы или практические правила по этому поводу?

РЕДАКТИРОВАТЬ2: Причина, по которой shared_ptr isn ' Это приемлемо, потому что мне нужен метод release (), поскольку я убираю некоторый устаревший код, вводя фабричные методы, но он должен сосуществовать с некоторым ручным кодом владения указателем. Использование shared_ptr во всей кодовой базе было бы отличным, но огромной задачей.

EDIT3: В конце концов, auto_ptr подходил для этой работы, когда я обнаружил причуды прямого включения. Было бы интересно также попробовать написать собственный удалитель для shared_ptr , чтобы разрешить необязательное удаление указателя.

8
задан the_mandrill 22 September 2010 в 20:53
поделиться