Оглавление

Регистрация scoped-reference

Некоторые C++ типы данных обладают специальными требованиями к памяти, где они расположены, например, конкретные потребности выравнивания, или пул памяти. Так как AngelScript не следит, где и каким образом выделяются такие типы данных, они должны быть зарегистрированы в качестве сслыки. В этом случае следует воспользоваться scoped-reference.

Время жизни 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 );
Еще:
Регистрация ссылки

Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник.