オブジェクトポインタを取得 GetPointer 関数

関数

共通関数

GetPointer 関数

 この関数は、オブジェクトポインタを取得します。

 クラスオブジェクトだけがポインタを持っています。構造体および単純型変数のインスタンスは、ポインタを持つことができません。new演算子を使用して作成されたのではなく、たとえば、オブジェクトの配列で自動的に作成されたクラスオブジェクトには、ポインタがあります。ただし、このポインタは自動型 POINTER_AUTOMATIC になるため、delete演算子を適用することはできません。それ以外は、POINTER_AUTOMATIC型の動的ポインタと変わりません。

 構造体型や単純型の変数はポインタを持たないため、GetPointer関数を適用することは禁止されています。また、ポインタを関数の引数として渡すことも禁止されています。これらすべての場合において、コンパイラはエラーを通知します。

 不正なポインタを呼び出した場合、プログラムが重大なエラーとして終了します。そのため、ポインタを使用する前に CheckPointer関数を呼び出す必要があります。次の場合、ポインタは正しくない可能性があります。
・ポインタが NULL(0)。
・オブジェクトが delete演算子を使用して削除されている。

 CheckPointer関数は、ポインタの有効性をチェックするために使用されます。0以外の値は、ポインタがアクセスして使用できることを保証します。

データ型と構成・戻り値

void* GetPointer(①);

 戻り値は、オブジェクトポインタを返します。

引数 [1]

 GetPointer関数は 1個の引数で構成されます。


引数名データ型単位初期値説明
anyobjectany_class任意のクラスのオブジェクト。

使用例

GetPointer関数によるオブジェクトポインタの確認

 GetPointer関数を使ってオブジェクトポインタを確認します。

コード

// GetPointer関数によるオブジェクトポインタの確認
#property strict
void OnInit() {

Ctest* test_class;
Ctest* test_class1;    // ①
Ctest  test_class2[2]; // ②
   
test_class1 = new Ctest;
   
test_class = GetPointer(test_class1);
Print("①new演算子で作成したオブジェクトのポインタ:", test_class, " ポインタタイプ:", CheckPointer(test_class));
   
test_class = GetPointer(test_class2[0]);
Print("②配列で作成したオブジェクトのポインタ:", test_class, " ポインタタイプ:", CheckPointer(test_class));
}
class Ctest{};

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

タイトルとURLをコピーしました