placement newを使ってLuaで確保したメモリに上書き
ユーザーデータを使うとき、Lua側でメモリ管理をしてもらうためにlua_newuserdataを使う。その戻り値は確保した先頭のポインタであるため、これをnewの引数にとってPlacement newを行う。
int FDTDLua::L_createMaterial(lua_State* L) { auto self = (FDTDLua*)lua_touserdata(L, lua_upvalueindex(1)); // 引数群 double epsilonr = lua_tonumber(L, 1); double sigma = lua_tonumber(L, 2); // 戻り値を返す auto material = (Material*)lua_newuserdata(L, sizeof(Material)); new(material) Material(epsilonr, sigma); // ここに注目 return 1; }