У нас есть библиотека C++, которую мы предоставляем нескольким различным клиентам. Недавно мы перешли от использования raw-указателей в публичном интерфейсе к использованию boost :: sharedptr. Это обеспечило огромную выгоду, как вы могли догадаться, в том, что теперь клиентам больше не нужно беспокоиться о том, кому нужно удалять то, что и когда. Когда мы сделали переключатель, я полагал, что это правильно, но меня беспокоило, что мы должны были включить что-то из сторонней библиотеки в наш публичный интерфейс - как правило, вы избегаете такого рода вещей, если можете. Я рационализировал это, что повышение было практически частью языка C++, и наш прецедент требует, чтобы и клиентский код, и библиотека удерживали указатели на объекты. Однако недавно один из наших клиентов спросил нас, можем ли мы переключиться на использование нейтрального класса интеллектуальных указателей в интерфейсе, потому что наша библиотека по существу вынуждает их к определенной версии boost-point, которую я, безусловно, понимаю и ценю. Так что теперь мне интересно, какой может быть лучший способ действий. Я немного подумал об этом и задался вопросом о создании простого класса интеллектуальных указателей, который просто содержал интеллектуальный указатель реального толчка. Но тогда клиенты, вероятно, сразу же добавят один из них в свой вкус boost :: sharedptr, а затем мы будем иметь три общих указателя в глубину - что может быть проблемой, а может и нет. Во всяком случае, я бы хотел услышать некоторые мнения сообщества о том, как наилучшим образом решить эту проблему.Использование boost :: shared_ptr в общедоступном интерфейсе библиотеки
Редактировать: Первоначально я сказал, что передача права собственности, но я должен был указать, что код с обеих сторон границы API должен содержать указатель на объект.
... что делает невозможным скрытие реализации интерфейсов, поскольку все они должны быть шаблонами. Не очень хорошая идея для тех, кто пытается продать проприетарное программное обеспечение. – Bklyn 2009-01-07 20:14:22
@Bklyn: Я бы не осмелился использовать стороннюю C++-библиотеку, не имея, по крайней мере, ленточного источника. C++ ABI слишком хрупок. – Joshua 2010-03-22 00:16:59