12.6.8.2 포인터 타입(Pointer Types)

12.6.8.2 포인터 타입(Pointer Types)

C와 COM API는 C 구조체가 함수를 포함할 수 없으므로 컨텍스트 객체를 함수에 전달하도록 요구합니다. 이러한 컨텍스트는 단순히 구조체에 대한 포인터입니다. 이러한 API에서 사용자는 컨텍스트를 직접 할당(예: malloc 사용)할 책임이 없습니다. 대신 API가 일종의 alloc과 free 함수를 제공해 이러한 작업을 수행해 줍니다. 이러한 API가 널리 퍼져 있기 때문에 이 패턴을 나타내는 포인터 타입 extern 클래스가 설계되었습니다. 이들은 값 타입 extern과 많은 유사점을 공유하지만 값으로 전달되는 타입 대신 참조(즉 포인터)로 전달되는 타입을 나타냅니다.

포인터 타입과 값 타입 extern의 주요 차이점:

  • 포인터 타입은 new 생성자를 가질 수 없습니다. 대신 정적 팩토리 메서드나 네이티브 alloc/free 함수가 사용됩니다.
  • 포인터 타입은 nullable입니다.
  • 인스턴스 메서드는 포인터를 받습니다.

포인터 타입의 namespacetype 필드 외에 유효한 flags는 값 타입과 유사합니다.

포인터 타입 extern의 예:

@:cpp.PointerType({ namespace : [ 'bar' ], type : 'Foo*' })
extern class Bar {
    static function create():Bar;
}

function main() {
    final b = Bar.create();
}

출처: Pointer Types

더 알아보기