ページ 11

オブジェクトの動的確保について

Posted: 2016年7月16日(土) 21:56
by うん
これでエラーが出ないのが不思議なんですが

enum a{
C_TYPE_PLAYER,
B_TYPE_PLAYER,
D_TYPE_PLAYER,
};

Character* character;

character = new Character[IMAGE_MAX];

delete[] character;


character[C_TYPE_PLAYER].initialize(~);

この

character[C_TYPE_PLAYER]->initialize(~);

この部分を アロー演算子でアクセス出来ないのはなぜでしょうか?

Re: オブジェクトの動的確保について

Posted: 2016年7月16日(土) 23:14
by みけCAT
C++の場合、character[C_TYPE_PLAYER]はCharacter型であってポインタではなく、かつCharacter型でアロー演算子がオーバーロードされていないからでしょう。
characterが指す配列は既にdeleteされているからです。
deleteされたものにアクセスしてはいけません。

うん さんが書きました:これでエラーが出ないのが不思議なんですが
本当に不思議ですね。
詳しく調べてはいませんが、多分未定義でしょう。

Re: オブジェクトの動的確保について

Posted: 2016年7月17日(日) 09:10
by うん
回答ありがどうございます。

もうすこし詳しく書くと


//グローバル
Character* charcter;

int main(){
while(ゲームループ){

character = new Character[IMAGE_MAX] ;

switch( game_mode){
case 1:
maingame();
break;
}

}
delete[] character;
}

int maingame(){

if( (character[T_TYOE_TYTLE].initialize()) == false){
return -1;
}
}

こんな感じです ここで
character[T_TYOE_TYTLE].initialize() が アロー演算子でアクセス出来ないんです

指す必要がないからでしょうか?

Re: オブジェクトの動的確保について

Posted: 2016年7月17日(日) 09:37
by みけCAT
character[C_TYPE_PLAYER]はCharacter型であってポインタではなく、かつCharacter型でアロー演算子がオーバーロードされていないからでしょう。