I
Size: a a a
S
ptr1 == ptr2 => true)__gc и т.д. Тут — если ты делаешь lua_newuserdata — каждый раз создаётся новая юзердата, то есть они никогда не равны между собой, даже если ты скопировал в них одну и ту же структуру. MyType * ptr = lua_newuserdata(L, sizeof(MyType));
// КОПИРУЕМ значение по указателю юзердаты
*ptr = MyTypeStruct; // или *ptr = &MyTypeStructPtr
Простым присваиванием (menu_ud = menu;) — ты просто меняешь указатель, а не значение по нему.AZ
ptr1 == ptr2 => true)__gc и т.д. Тут — если ты делаешь lua_newuserdata — каждый раз создаётся новая юзердата, то есть они никогда не равны между собой, даже если ты скопировал в них одну и ту же структуру. MyType * ptr = lua_newuserdata(L, sizeof(MyType));
// КОПИРУЕМ значение по указателю юзердаты
*ptr = MyTypeStruct; // или *ptr = &MyTypeStructPtr
Простым присваиванием (menu_ud = menu;) — ты просто меняешь указатель, а не значение по нему.S
__class = "myclass"S
lua_newmetatable(L, "classname")S
mytype * ptr = (mytype *)luaL_checkudata(L, 1, "classname");S
// размечаем юзердату размером с указатель
MyType * ptr = lua_newuserdata(L, sizeof(MyType *));
// вставляем указатель в качестве значения по указателю луёв
*ptr = MyTypeStructPtr;
А потом такой:MyType * structptr = &ptr;S
VM
VM
VM
VM
AZ
// размечаем юзердату размером с указатель
MyType * ptr = lua_newuserdata(L, sizeof(MyType *));
// вставляем указатель в качестве значения по указателю луёв
*ptr = MyTypeStructPtr;
А потом такой:MyType * structptr = &ptr;AZ
S
I