tolua ++ análisis realización

El proyecto está utilizando lua cocos2dx vinculante, tolua manera vinculante ++. Para el código de uso lua a gran escala que la confianza no es muy completa, pasado algún tiempo leyendo tolua código ++, queremos entender la implementación de enlace, el proyecto ayudará a lua código de control. De la lectura de los resultados, al menos en términos de gestión de memoria, ayuda sigue siendo muy grande.

Cómo 1.tolua ++ c ++ objetos en Lua en

tolua ++ lua para cada objeto entrante el establecimiento de un userdata, el valor de los datos de usuario, es la dirección de objetos de C ++. userdata de metatabla, es un tolua ++ establecido mesa userdata registro correspondiente a c ++ tipos de información, incluyendo variables miembro información derivada, funciones miembros y así sucesivamente.

Para la lectura de variables miembro asignaciones, tolua ++ se construye .set dos mesas y .get en años metatabla. Las dos tablas se almacenan en un claves variable llamada, la función c para leer las entradas valor establecido. En metatabla de __index y __newindex, la clave para una variable llamada, hecha de la función .get y lea la configuración y tabla de llamadas .set.

Para las llamadas a funciones miembro, sólo tiene una función llamada una llave, una función del valor almacenado en metatabla en muy bien.

++ función entrante objeto tolua c ++ es tolua_pushusertype. En circunstancias normales, la primera vez que utilice esta función a un c ++ envío de objetos a la pila lua, se creará un nuevo datos de usuario. tolua ++ c ++ dirección de objeto será un enlace, valor UserData, la tabla de valores clave almacenada en tolua_ubox. Cuando el siguiente c ++ para empujar el mismo objeto tomado de esta lista puede ser empujado sobre el userdata pila.

-----------------

¿Cómo lidiar con el tipo de herencia 2.tolua ++

clase padre metatabla es una subclase de metatabla de metatabla. Cuando esta llamada, el método de la clase padre, irá metatabla matriz de la búsqueda.

tolua ++ también mantiene una tabla de tolua_super ese tipo de metatabla a C ++ es la clave para una tabla como valor. Los valores en el nombre del tipo de mesa es un enlace con el valor verdadero, la grabación correspondiente a un C ++ metatabla qué tipo de padres. Esta forma se puede utilizar para ayudar a determinar si el objeto es un cierto tipo (ejemplo sub-clase se puede considerar el tipo de matriz)

-----------------

Cómo ++ gestión de ciclo de vida del objeto 3.tolua

En general, cuando el interior de las variables de referencia ++ c lua objeto puede ser basura, tolua ++ simplemente liberar los datos de usuario dirección de puntero de 4 bytes de la memoria ocupada. Pero también se unen o código especifica el camino para la liberación del objeto de recurso compartido tolua ++ memoria real puede.

modo de unión, medios cuando el tipo de c ++ constructor se utiliza para lua derivar en tolua ++, tolua ++ generan automáticamente método new_local. Si la memoria reciclaje objetivo en código LUA, cuando un objeto el uso de este nuevo método, tolua ++ llama al método tolua_register_gc, lo que indica la recuperación del objeto.

En el código c ++, utilizando tolua_pushusertype_and_takeownership; código lua en uso tolua.takeownership, se puede lograr el mismo propósito.

Porque por una memoria tolua ++ recuperación especificado estos objetos, si su tipo destructor deriva por tolua ++, en el momento de recuperación de la memoria, se eliminarán operador mediante una llamada al destructor de un objeto. De lo contrario se utilizará el método libre de recuperar.

tolua_register_gc manera de hacer las cosas, es clave para el puntero de objeto al objeto metatabla el valor, el valor de clave almacenada en la tabla tolua_gc. En __gc tipos de objetos método de la tabla metatabla donde, tolua cheques ++ tolua_gc tabla contiene la clave de esta entrada de dirección. Se incluye en las palabras anteriores de trabajo de recuperación de la memoria.

4. Otros

A veces, después de obtener una lua objetos de C ++, nos gustaría asignarle algún significado sólo en lua atributos ambientales. O bien, nos gustaría extender una clase de C ++ en Lua. tolua ++ también proporciona un mecanismo para lograr esta demanda.

tolua ++ en LUA_REGISTRY mantiene en una mesa tolua_peers. Esta tabla para representar la c ++ userdata objeto es clave para una tabla t es el valor. t allí en el registro de este objeto en las propiedades extendidas en Lua.

cocos2dx no utilizó plenamente tolua ++ manera, pero algunas modificaciones mismos. A continuación el blog debe modificarse registro de por qué y cómo, e introducir algunas cosas específicas se unen cocos2dx LUA.
----------------
responsabilidad: Este artículo es RDCC blogger "wtyqm 'artículo original, siga el CC 4.0 BY-SA acuerdo de derecho de autor, reproduce, por favor adjuntar el enlace de la fuente original y esta declaración. .
fuente original: https: //blog.csdn.net/wtyqm/article/details/8977975

Publicado 56 artículos originales · ganado elogios 10 · Vistas a 60000 +

Supongo que te gusta

Origin blog.csdn.net/GJQI12/article/details/104923541
Recomendado
Clasificación