Является ли std::unique_ptr ABI-совместимым с необработанными указателями?
Мое чтение о std::unique_ptr
убедил меня, что он (наряду с другими умными указателями), безусловно, является лучшим выбором для указателей внутри проекта (особенно после того, как оптимизирующий компилятор может удалить все затраты времени выполнения из std:: unique_ptr?), но я пока не уверен о том, что делать на интерфейсе. Я не совсем понимаю, как работают различные C++ ABI, поэтому, пожалуйста, потерпите меня, если это глупый вопрос, но можно ли заменить функции, которые принимают или возвращают указатели, классы / структуры, имеющие члены-указатели, и т. Д. unique_ptr
(возможно, используя unique_ptr
refs?) без перекомпиляции? Может ли код C взаимодействовать с интерфейсами C++, используя unique_ptr
без осложнений?
1 ответ
AFAIK, нет никаких гарантий, что sizeof(unique_ptr<T>) == sizeof(T*)
так что нет.
Но даже если бы он был того же размера, нет никакой гарантии, что произвольный ABI передаст аргументы указателя тем же механизмом, что и аргументы "значения".