オブジェクトのポインタ定数(ENUM_POINTER_TYPE)
オブジェクトのポインタ定数(ENUM_POINTER_TYPE)は、オブジェクトのポインタの種類を確認するための定数です。
例えば、オブジェクトがどのように作成されたのかを確認したいときに使われます。
オブジェクトのポインタ定数は、以下の関数の戻り値として使います。
- CheckPointer関数:オブジェクトのポインタの種類を確認する関数
オブジェクトのポインタ定数(ENUM_POINTER_TYPE)
| 定数 | 説明 |
| POINTER_INVALID | 不正なポインタ |
| POINTER_DYNAMIC | new演算子で作成されたオブジェクトポインタ |
| POINTER_AUTOMATIC | 自動的に作成されたオブジェクトポインタ |
オブジェクトのポインタ定数(ENUM_POINTER_TYPE)の使い方
主に、CheckPointer関数の戻り値として使用されます。
例えば、以下のように使用します。
//適当なクラスを作成
class CItem{
};
//+------------------------------------------------------------------+
//| 初期化
//|------------------------------------------------------------------|
void OnInit(){
//変数を宣言
CItem* temp_class;
ENUM_POINTER_TYPE temp_ret;
//オブジェクトを作成
temp_class = new CItem;
temp_ret = CheckPointer(temp_class);
//表示して確認
if( temp_ret == POINTER_DYNAMIC) {
Print( "new演算子で作成されたオブジェクト。","ポインタ:",temp_class , " チェック結果:",temp_ret );
} else {
Print( "他要因で作成されたオブジェクト。" ,"ポインタ:",temp_class , " チェック結果:",temp_ret );
}
}プログラム例
以下は、オブジェクトのポインタ定数(ENUM_POINTER_TYPE)を使って、new演算子で作成したオブジェクトと自動的に作成したオブジェクトのポインタの種類をそれぞれ確認するサンプルプログラムです。
//適当なクラスを作成
class CItem{
public:
int value;
CItem(){ value = 0; }
};
//+------------------------------------------------------------------+
//| スクリプト開始関数
//|------------------------------------------------------------------|
void OnStart(){
//--- new演算子で作成(POINTER_DYNAMIC)
CItem* dynamicObj = new CItem;
ENUM_POINTER_TYPE dynamicType = CheckPointer(dynamicObj);
if(dynamicType == POINTER_DYNAMIC){
Print("dynamicObj は new演算子で作成されたオブジェクトです。 種類:", EnumToString(dynamicType));
} else if(dynamicType == POINTER_AUTOMATIC){
Print("dynamicObj は自動的に作成されたオブジェクトです。 種類:", EnumToString(dynamicType));
} else {
Print("dynamicObj は不正なポインタです。 種類:", EnumToString(dynamicType));
}
//--- 自動的に作成(POINTER_AUTOMATIC)
CItem autoObj;
ENUM_POINTER_TYPE autoType = CheckPointer(GetPointer(autoObj));
if(autoType == POINTER_DYNAMIC){
Print("autoObj は new演算子で作成されたオブジェクトです。 種類:", EnumToString(autoType));
} else if(autoType == POINTER_AUTOMATIC){
Print("autoObj は自動的に作成されたオブジェクトです。 種類:", EnumToString(autoType));
} else {
Print("autoObj は不正なポインタです。 種類:", EnumToString(autoType));
}
//--- 不正なポインタの確認
delete dynamicObj;
ENUM_POINTER_TYPE deletedType = CheckPointer(dynamicObj);
if(deletedType == POINTER_INVALID){
Print("削除後の dynamicObj は不正なポインタです。 種類:", EnumToString(deletedType));
}
}このプログラムでは、3つのケースを確認しています。
- POINTER_DYNAMIC:new演算子で作成したオブジェクトのポインタを確認
- POINTER_AUTOMATIC:自動的に作成したオブジェクトのポインタをGetPointer関数で取得し確認
- POINTER_INVALID:delete演算子で削除済みのオブジェクトのポインタを確認
【補足】オブジェクトのポインタ定数の列挙型(ENUM_POINTER_TYPE)
オブジェクトのポインタ定数は、ENUM_POINTER_TYPEという列挙型に含まれています。
列挙型は、定数群をひとまとめにしたものです。
以下のように使います。
ENUM_POINTER_TYPE pointerType = POINTER_DYNAMIC;上記のようにプログラムすると、pointerType変数に POINTER_DYNAMICの値が代入されます。





