LINUX.ORG.RU

История изменений

Исправление 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). Но это лишает всю затею смысла, ведь можно то же самое проделывать с самим объектом отказавшись от умных указателей, которые плохо сочетаются с сишным кодом.