Re: Remove Luabind ownership on C++ pointer?
Daniel Wallin <[email protected]>
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <[email protected]> |
On Fri, Oct 1, 2010 at 12:15 AM, neosettlers <[email protected]> wrote: > Thx everyone for the inputs, > >> Well, this is a very rare request. Having to explicitly state that instances >> should be destroyed would screw over almost everyone. > > I think it is at least practical to have the choice to managed your memory > yourself without reinventing the wheel. Sure, and you do have that choice. >> Basically, you have some class whose instances somehow manages their own >> lifetime? > > Of course, all classes are registered and unregister by an object manager. Right. Typically this would be done by either: 1. Creating the object in lua, and then have some function on the manager that explicitly takes ownership, or... 2. Having a factory function on your manager that creates the object and returns non owning pointer. (2) works automatically, and luabind has adopt() for (1). Perhaps we should have a release_ownership() policy similar to adopt(), that can be used post-construction, I'm not sure. That said, I believe your problem can be handled as I show below. > I managed to solved my problem in modifying the source directly: > > object_rep::~object_rep() > { > if (!m_instance) > return; > /// m_instance->~instance_holder(); > deallocate(m_instance); > } Did you try what I posted? In fact, it can be done in an even simpler way: class_<Whatever, Whatever*>("Whatever") Makes luabind hold the newly created instance in a raw Whatever*, and thus won't delete it. -- Daniel Wallin BoostPro Computing http://www.boostpro.com ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev