Frage

Ist es möglich, für ein Stück Lua Userdaten zu halten Verweis auf ein Objekt Lua? (Wie ein Tisch oder ein anderes Stück von Benutzerdaten?). Im Grunde, was ich wissen will, ist:

Kann erstelle ich ein Stück von Benutzerdaten in einer solchen Art und Weise taht wenn die gc läuft, können die Benutzerdaten sagen: „Hey ich Verweise auf andere Objekte zu halten, sie als gut markieren“

EDIT: Antwort auf lhf:

Angenommen, ich habe:

struct Vertex {
  double x, y, z;
}

struct Quaternion {
  double w, x, y, z;
}

Jetzt kann ich tun:

struct Foo {
  Vertex v;
  Quaternion q;
}

aber annehmen, statt ich will:

struct Bar {
  Vertex *v;
  Quaternion *q;
}

[d. nehme an Vertex & Quaternion sind wirklich große Stücke von Benutzerdaten].

Nun, ich nehme eine Lua Benutzerfunktion, die eine Benutzerdaten Vertex nimmt, und ein Userdata Quaternion und erstellt eine Userdata Bar (ich will nicht ein userdata Foo da ich den Platz sparen wollen) - dann ich brauche irgendwie für die Benutzerdaten Vertex * / Quaternion * nicht gc-ed sein.

War es hilfreich?

Lösung

  

Ist es möglich, für ein Stück lua Benutzerdaten zu halten Verweis auf ein lua Objekt?

Nein. Ein Benutzerdaten kann nicht einen Zeiger auf ein anderes Objekt Lua halten. Wenn Sie einen Benutzerdaten zu halten, eine andere Lua Objekt am Leben verwenden möchten, müssen Sie es tun mit schwachen Tabellen . Roberto Buch als Abschnitt auf, wie es zu tun .

Andere Tipps

Sie ist bereits eine Weile her, seit ich etwas mit lua tat. Ich glaube, wenn die referenzierten Daten durch die lua Maschine erstellt wurde, dann wird es es aufzuräumen selbst. Andernfalls müssen Sie den gc Rückruf in Ihrem C-Code warten, und dem Speicher selbst befreien.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top