История изменений
Исправление KivApple, (текущая версия) :
Проблема в том, что отсутствует гарантия, что sizeof(итератор) <= sizeof(void*). То есть итератор тупо непредставим в виде void*. И от его стабильности нет толку. Единственное решение как протащить итератор через void* - выделять память под итератор в куче и перемещать итератор туда (а потом не забыть освободить память через delete). Но это лишает всю затею смысла, ведь можно то же самое проделывать с самим объектом отказавшись от умных указателей, которые плохо сочетаются с сишным кодом.
RAII не работает, когда циклом жизни твоих объектов по сути управляет внешний код (пока callback не вызовут, освобождения ресурсов не будет).
Исправление KivApple, :
Проблема в том, что отсутствует гарантия, что sizeof(итератор) <= sizeof(void*). То есть итератор тупо непредставим в виде void*. И от его стабильности нет толку. Единственное решение как протащить итератор через void* - выделять память под итератор в куче и перемещать итератор туда (а потом не забыть освободить память через delete). Но это лишает всю затею смысла, ведь можно то же самое проделывать с самим объектом отказавшись от умных указателей, которые плохо сочетаются с сишным кодом.
RAII не работает, когда циклом жизни твоих объектов по сути управляет внешний код.
Исправление KivApple, :
Проблема в том, что отсутствует гарантия, что sizeof(итератор) <= sizeof(void*). То есть итератор тупо непредставим в виде void*. И от его стабильности нет толку. Единственное решение как протащить итератор через void* - выделять память под итератор в куче и перемещать итератор туда (а потом не забыть освободить память через delete). Но это лишает всю затею смысла, ведь можно то же самое проделывать с самим объектом отказавшись от умных указателей, которые плохо сочетаются с сишным кодом.
Исходная версия KivApple, :
Проблема в том, что отсутствует гарантия, что sizeof(итератор) <= sizeof(void*). То есть итератор тупо непредставим в виде void*. Единственное решение как протащить итератор через void* - выделять память под итератор в куче и перемещать итератор туда (а потом не забыть освободить память через delete). Но это лишает всю затею смысла, ведь можно то же самое проделывать с самим объектом отказавшись от умных указателей, которые плохо сочетаются с сишным кодом.