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

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]