Another object handle trouble...
Sorry, another thing that still confuse me...
I've registered functions/methods which creates instances of some object. These functions can be both called from C & AS. My app allow user to run scripts to create these objects, but when the scripts ends, objects are deleted (while it shouldn't).
It's look like :
// in script
cObject@ pObject;
...
pObject = pMain.CreateAnObject();
My understanding is that CreateAnObject() don't call AddRef(), because it can be called from C too where calling AddRef() doesn't make sense. That means I would have to declare a script dedicated method (or maybe use autohandles), which would discord with the reason I found AS great (because you didn't have to declare script dedicated function like in most other languages).
So whys the reason I get 2 Release() here (and so have to AddRef()) ?
Thanks a lot for your work yet,
Lbas
Lbas
The handle returned by CreateAnObject() is released, after it is no longer used. The handle assignment to the pObject variable calls AddRef, and this is released when the variable goes out of scope.
You can solve this in two ways:
1. Register the CreateAnObject() to return a reference to the object. Though this might not be intuitive and prevents you from returning null-handles.
2. Register the CreateAnObject() so that AngelScript automatically calls AddRef on the returned pointer. This is the reason why I implemented autohandles in the first place, to avoid having to create wrapper functions when dealing with object handles. The drawback is a slight overhead because of the extra dynamic processing needed by AngelScript, but in most cases you'll probably not notice a difference.
Regards,
Andreas
You can solve this in two ways:
1. Register the CreateAnObject() to return a reference to the object. Though this might not be intuitive and prevents you from returning null-handles.
RegisterObjectMethod("main", "cObject &CreateAnObject()", asMETHOD(main, CreateAnObject), asCALL_THISCALL);
2. Register the CreateAnObject() so that AngelScript automatically calls AddRef on the returned pointer. This is the reason why I implemented autohandles in the first place, to avoid having to create wrapper functions when dealing with object handles. The drawback is a slight overhead because of the extra dynamic processing needed by AngelScript, but in most cases you'll probably not notice a difference.
RegisterObjectMethod("main", "cObject @+ CreateAnObject()", asMETHOD(main, CreateAnObject), asCALL_THISCALL);
Regards,
Andreas
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement