
オブジェクトのポインタを返します。
GetPointer
void* GetPointer(
any_class anyobject // classオブジェクト
);- 引数
| 引数名 | 初期値 | I/O | 詳細 |
| anyobject | - | IN | classオブジェクト |
- 戻り値
オブジェクトのポインタを返します。
- その他
クラスオブジェクトのみポインタを持っています。
構造体のインスタンスやシンプルな型の変数はポインタを持つ事が出来ません。
new演算子を使用せずに作成されたクラスオブジェクト(例えばオブジェクト配列で自動的に作成された)は、
またポインタを持っていません。
このポインタは自動的にPOINTER_AUTOMATICタイプになります、その為delete()演算子で削除する事は出来ません。
それ以外は、POINTER_AUTOMATICタイプのポインタは動的なポインタと変わりありません。
シンプルな型の変数と構造体の変数はポインタを持っていませんので、
GetPointer()関数を適する事は出来ません。
関数の引数にポインタを渡す事も出来ません。
全てのケースにおいてコンパイラはエラーを通知します。
不正なポインタを呼び出すとプログラムは致命的なエラーを引き起こします。
だからこそ、CheckPointer()関数はポインタを使用する前に呼び出す必要があります。
次のような場合が不正ポインタです。
・ポインタがNULL
・オブジェクトがdelete演算子によって既に削除されている
この関数は、ポインタの有効性を確認する為に使用する事が出来ます。
ポインタの値がゼロ以外の場合は、アクセス可能なポインタです。
サンプルソース
#property strict
class CItem{
};
//+------------------------------------------------------------------+
//| 初期化
//|------------------------------------------------------------------|
void OnInit(){
CItem* temp_ret; // ポインタ取得用ポインタ
CItem* temp_class; // new演算子で作成するクラスオブジェクト用ポインタ
CItem temp_class_darray[2]; // 動的クラスオブジェクト用
temp_class = new CItem;
temp_ret = GetPointer(temp_class); // クラスオブジェクトのポインタを取得
Print( "new演算子で作成されたオブジェクト。",
"ポインタ:",temp_ret , " ポインタタイプ:",CheckPointer(temp_ret) );
temp_ret = GetPointer(temp_class_darray[0]); // 動的に作成されたクラスオブジェクトのポインタ取得
Print( "動的に作成されたオブジェクト。 ",