Код: Выделить всё
struct wrapper_object {
template wrapper_object(Args&&... args) : m_internal (std::forward(args)... ) {}
std::shared_ptr < real_object> m_internal;
}
// simplified
int new_wrapper_object(wrapper_object** out)
{
auto wrapper = make_unique();
wrapper->m_internal = make_shared();
*out = wrapper.release();
return 0;
}
int delete_wrapper_object(wrapper_object* self)
{
delete self;
}
Я считаю, что это должен быть либо unique_ptr (когда Клиент фактически управляет временем жизни через delete_wrapper_object), ИЛИ даже простой тупой указатель (когда Клиент имеет ссылку только для чтения, когда библиотека не предоставляет соответствующую функцию delete_..).
(Я оставляю в стороне "make_unique" ... шаблон Release()", который также является странной маскировкой для "нового")
Подробнее здесь: https://stackoverflow.com/questions/798 ... -interface
Мобильная версия