Мне нужен интеллектуальный указатель без учета ссылок, который может сочетать некоторые полезные аспекты 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 ).Кто-нибудь получил какие-либо общие советы или практические рекомендации по этому вопросу?
EDIT2: причина, по которой shared_ptr неприемлема, заключается в том, что мне нужен метод release (), поскольку я исправляю некоторый унаследованный код, вводя фабричные методы,но он должен сосуществовать с некоторым кодом владения указателем вручную.Использование shared_ptr во всей кодовой базе было бы здорово, но огромная задача.
EDIT3: В конце концов, auto_ptr
было достаточно для работы, как только я обнаружил причуды прямого включения.Было бы также интересно попробовать написать пользовательское средство удаления для shared_ptr
, чтобы разрешить необязательное удаление указателя.