Здравствуйте, AndryBlack, Вы писали:
AB>но без хака в shared_ptr я не вижу возможности это сделать.
Тут 2 очевидных viable подхода:
1. Делать цельный Lua<->C++ count reference (если boost::shared_ptr не подходит можно посмотреть в сторону intrusive_ptr — там счётчик вытащен наружу)
2. Делать strong_ptr <-> weak_ptr концепт
Мы остановились на втором. Объект владеется С++ стороной, Lua держит ключик, по которому происходит поиск и доступ к объекту на С++ стороне. Соответственно если объект удалён на С++ стороне, Lua получит нормальный null-object. Если Lua хочет удалить объект сама — используем спец. API.