Является ли 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 передаст аргументы указателя тем же механизмом, что и аргументы "значения".

Другие вопросы по тегам