きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

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;
}