Использование boost :: shared_ptr в публичном интерфейсе библиотеки

У нас есть библиотека C ++, которую мы предоставляем нескольким различным клиентам. Недавно мы перешли от использования необработанных указателей в публичном интерфейсе к использованию boost :: sharedptr. Как вы можете догадаться, это дало огромную выгоду в том, что теперь клиентам больше не нужно беспокоиться о том, кому и что нужно удалять, и когда. Когда мы внесли свой вклад, я подумал, что это правильно, но меня беспокоило, что мы должны включить что-то из сторонней библиотеки в наш публичный интерфейс - обычно вы избегаете такого рода вещей, если можете. Я обосновал это тем, что boost теперь практически является частью языка C ++, и наш вариант использования требует, чтобы и клиентский код, и библиотека содержали указатели на объекты. Однако недавно один из наших клиентов спросил нас, можем ли мы перейти к использованию нейтрального класса интеллектуальных указателей в интерфейсе, потому что наша библиотека, по сути, заставляет их использовать определенную версию повышения, что я, безусловно, понимаю и ценю. Так что теперь я задаюсь вопросом, каким может быть лучший образ действий. Я немного подумал об этом и задумался о создании простого класса интеллектуальных указателей, который просто содержал бы настоящий интеллектуальный указатель. Но тогда клиенты, вероятно, сразу добавят один из них в свой аромат boost :: sharedptr, и тогда у нас будет три общих указателя - это может быть проблемой, а может и нет. В любом случае, я бы хотел услышать мнение сообщества о том, как лучше всего решить эту проблему.

Редактировать: я изначально говорил о передаче права собственности, но я должен был указать, что код с обеих сторон границы API должен содержать указатель на объект.

Ответы на вопрос(10)

Ваш ответ на вопрос