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