Question

Est-il possible pour un morceau de Lua UserData pour contenir la référence à un objet Lua? (Comme une table ou un autre morceau de userdata?). Au fond, ce que je veux savoir est:

Puis-je créer un morceau de userdata telle taht façon lors de l'exécution gc, les données de l'utilisateur peuvent dire: «Hey je tiens les références à ces objets, les marquer ainsi »

EDIT: répondre à lhf:

Supposons que j'ai:

struct Vertex {
  double x, y, z;
}

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

Maintenant, je peux faire:

struct Foo {
  Vertex v;
  Quaternion q;
}

mais supposons plutôt que je veux:

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

[i.e.. Vertex & Quaternion suppose sont vraiment gros morceaux de userdata].

Maintenant, supposons que j'ai une fonction utilisateur Lua qui prend un userdata Vertex, et un userdata Quaternion, et crée une barre userdata (je ne veux pas userdata Foo puisque je veux sauver l'espace) - je besoin en quelque sorte pour le userdata Vertex * / * Quaternion pour ne pas être gc-ed.

Était-ce utile?

La solution

  

Est-il possible pour un morceau de données utilisateur lua pour contenir la référence à un objet lua?

Non. Un UserData ne peut pas tenir un pointeur vers un autre objet Lua. Si vous souhaitez utiliser un UserData pour garder un autre objet Lua vivant, vous devez le faire en utilisant des tables faibles . Le livre de Roberto en tant que section sur la façon de le faire .

Autres conseils

un moment que je l'ai fait quoi que ce soit avec lua. Je pense que si les données référencées a été créé par la machine à lua, il sera nettoyer lui-même. Sinon, vous devez attendre le rappel gc dans votre code C et libérer la mémoire vous-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top