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