Gå til innhold

__gc funksjonen blir ikke kjørt i luaplus


Anbefalte innlegg

Jeg driver for tiden å roter litt med luaplus og prøver å få et enkelt program til å fungere

Programmer skal registrere klassen CVector3 (3d posisjon) og få den til å fungere som en naturlig del av lua. Alt fungere fin fint, men av en eller annen merkelig grunn blir ikke __gc funksjonen kjørt når tabellen blir gcet (vet ikke helt om den blir gcet). Siden det ikke skjer så lekker jo programmet minne som en sil og det er jo litt dumt.

 

kode:

Klikk for å se/fjerne innholdet nedenfor

#include <windows.h>
#include "LuaPlus.h"
using namespace LuaPlus;
#include <math.h>
#include <assert.h>
#include <string>
#include "vector3.h"

int LuaGcVector3(LuaState* state)
{
delete (void*)state; //dette er vel muligen ikke riktig måte å gjøre det på, men poenget er at funksjonen ikke blir kjørt
return 1;
}

int LuaCreateVector3(LuaState* state)
{
CVector3* pClass = new CVector3;
LuaObject Tabel;
Tabel.AssignNewTable(state);
Tabel.SetLightUserData("__object", pClass);
Tabel.SetMetaTable(state->GetGlobal("CVector3"));
Tabel.Push();
return 1;
}

void LuaInitVector3(LuaState* state)
{
LuaObject mt = state->GetGlobals().CreateTable("CVector3");
LPCD::MetaTable_IntegratePropertySupport(mt);

mt.SetObject("__index", mt);
mt.Register("__call",	&LuaCreateVector3);
mt.Register("__gc",  &LuaGcVector3);
LPCD::PropertyCreate(mt, "x", &CVector3::x);
LPCD::PropertyCreate(mt, "y", &CVector3::y);
LPCD::PropertyCreate(mt, "z", &CVector3::z);

mt.RegisterObjectDirect("Normalize", (CVector3*)0, &CVector3::Normalize);

mt.SetMetaTable(mt);
}

int __cdecl main(int argc, char* argv[])
{
_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);

LuaState* state = LuaState::Create();

LuaInitVector3(state);

state->DoString("a = CVector3();");

 state->DumpObject("@", "a", state->GetGlobal("a"));
state->DoString("a = nil;");

state->GC(LUA_GCCOLLECT,100);

LuaState::Destroy(state);

_CrtDumpMemoryLeaks();
return 0;
}

 

På forhånd takk for alle svar

Endret av Giddion
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...