Время жизни scoped-reference ограничено областью видимости, она автоматически уничтожается при выходе из области видимости. Это значит, что для данного типа нельзя использовать хендлы.
Scoped-reference требует регистрации поведения при удалении (Scoped_Release в примере ниже). Регистрировать поведение при добавлении ссылки не допускается. Для инстанцирования объектов следует зарегистрировать фактори, в противном случае вы сможете только получать такие ссылки в качестве параметров.
Поскольку для таких объектов нельзя использовать хендлы, нет необходимости отслеживать количество ссылок на объект.
scoped *Scoped_Factory()
{
return new scoped;
}
void Scoped_Release(scoped *s)
{
if( s ) delete s;
}
// Регистрация scoped reference
r = engine->RegisterObjectType("scoped", 0, asOBJ_REF | asOBJ_SCOPED); assert( r >= 0 );
r = engine->RegisterObjectBehaviour("scoped", asBEHAVE_FACTORY, "scoped @f()", asFUNCTION(Scoped_Factory), asCALL_CDECL); assert( r >= 0 );
r = engine->RegisterObjectBehaviour("scoped", asBEHAVE_RELEASE, "void f()", asFUNCTION(Scoped_Release), asCALL_CDECL_OBJLAST); assert( r >= 0 );