[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Lunar, C++, and premature object destruction
- From: Watusimoto <watusimoto@...>
- Date: Thu, 02 Jul 2009 01:04:12 -0700
I'm working on a game that uses Lua to control robot players, written in
C++, and bound with Lunar, and am having problems controlling the
lifespan of objects created in C++ and referenced in Lua. (It's at
http://bitfighter.org, if you are curious, and the linked wiki contains
examples of some robot scripts.)
My primary object is a Ship. The lifetime of the Ship object is
completely controlled by C++. I also have a proxy object, called
LuaShip, that contains a pointer to the Ship, and handles all the
requests for information about the Ship from the Lua script. The goal
is that when the Ship is destroyed, the pointer on the LuaShip will be
set to NULL, and any future requests to the LuaShip can be intelligently
handled (probably by generating an error of some sort). The LuaShip is
exposed to Lua via Lunar if the robot script requests it (using a
getShip() method or somesuch).
The Ship object also contains a pointer to its LuaShip proxy. My
problem is that when the Ship object is destroyed, C++ seems to think
that all pointers to the LuaShip are gone, and it is OK to destroy the
LuaShip as well. It does not seem to recognize when a Lua instance is
also referring to the LuaShip. The result is that the LuaShip is
destroyed, and the Lua script is now left holding a reference to
nothing. When the script acts on it (thinking it's still valid), the
app crashes.
My questions are 1) Is this an appropriate architecture for managing Lua
instances that can have persistent references to C++ objects (Ship in
this case) that can be deleted without warning, and 2) are there any
good examples of code that uses Lunar in this manner that I can examine
to see where my problem might be?
Thank you,
Chris