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