Я пишу библиотеку, которая включает интерфейс для возврата \ получения shared_ptr
объектов.
Все казалось просто модным, пока мне не напомнили, что приложение, использующее мою библиотеку, может иметь другую версию CRT, а такжеВерсия STL.
В связи с этим возникает два вопроса:
Если версии STL отличаются между моим .lib и приложением, использующим его, как я могу убедиться, что одна и та же версия shared_ptr
используется в моей библиотеке и приложении?(STL не обеспечивает двоичную совместимость)
допустим, я решил вопрос 1, скопировав заголовок STL, определяющий shared_ptr
и переименовав его в my_shared_ptr
или любым другим способом, который теперь дает мнета же самая реализация shared_ptr
в моей библиотеке и приложении.так как это шаблонный класс и версии CRT отличаются, как я могу убедиться, что new
имеет соответствующий delete
?Если моя библиотека компилирует my_shared_ptr<SomeClass>
, а приложение компилирует my_shared_ptr<SomeClass>
, каждая компиляция вставляет свои new
и delete
в соответствии с версией CRT.Теперь, когда я создаю и передаю shared_ptr
из приложения в мою библиотеку для уничтожения, когда с ним завершается, могут вызываться несовпадения new
и delete
.
Прав ли япредположить, что должны быть скомпилированы два экземпляра my_shared_ptr<SomeClass>
, один - .lib, а другой - приложением?
Спасибо за любую помощь, Лев