Надо использовать статическую библотеку, сделанную третьими лицами.
У неё полноценный с++-интерфейс в том смысле, что через него передаются С++ объекты. Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.
Точно известно, что она собирается таким же компилятором, как и наш проект (VS2012u4), но я подозреваю, что одного совпадения версий компиляторов мало, надо ещё и синхронизировать их настройки.
Какие настройки компиляторов должны быть одинаковы в таком случае?
Здравствуйте, tdiff, Вы писали:
T>У неё полноценный с++-интерфейс в том смысле, что через него передаются С++ объекты. Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.
Это называется передача владения. Используй для этих целей умные указатели, тогда освобождение памяти будет происходить тоже в твоей либе.
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, tdiff, Вы писали:
T>>У неё полноценный с++-интерфейс в том смысле, что через него передаются С++ объекты. Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.
Q>Это называется передача владения. Используй для этих целей умные указатели, тогда освобождение памяти будет происходить тоже в твоей либе.
Ну отлично, осталось убедить автора библиотеки поменять интерфейс с
function(const string& )
на
function(const shared_ptr<string>&).
Здравствуйте, tdiff, Вы писали:
T>Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.
T>Какие настройки компиляторов должны быть одинаковы в таком случае?
Runtime Library (/MT or /MD), как минимум. Возможно, Preprocessor Definitions.
Здравствуйте, tdiff, Вы писали:
T>Здравствуйте, Qbit86, Вы писали:
Q>>Здравствуйте, tdiff, Вы писали:
T>>>У неё полноценный с++-интерфейс в том смысле, что через него передаются С++ объекты. Очень может быть, что они создаются в нашем коде, а удаляться будут уже в этой статической либе.
Q>>Это называется передача владения. Используй для этих целей умные указатели, тогда освобождение памяти будет происходить тоже в твоей либе.
И передача объектов, созданных в разных хипах, это не единственная проблема.
Например, в библиотеке может использоваться другой packing классов.
Здравствуйте, tdiff, Вы писали:
T>И передача объектов, созданных в разных хипах, это не единственная проблема. T>Например, в библиотеке может использоваться другой packing классов.
Более того, может быть разный sizeof в зависимости от preprocessor definitions, например debug версии могут содержать дополнительные данные для runtime проверок.
Здравствуйте, tdiff, Вы писали:
T>И передача объектов, созданных в разных хипах, это не единственная проблема.
В статических библиотеках у CRT (STL) хип один и тот же, если автор не менял это. Если менял и не предусмотрел это в интерфейсе, то ты в любом случае не сможешь создавать объекты у себя, а удалять их в библиотеке.