条件を満たしたらインスタンスを自分自身でdeleteしたいです。
試しに、以下のようなコードを書いてみました。
xをキーにして、thisポインタを渡しdeleteしています。
そしてそのポインタは後で再利用したいので、NULLを代入しておきます。
ステップ実行で追っていくと、インスタンスがdeleteされてNULLで初期化されているのですが
再利用しようとするとif文が実行されずインスタンスが生成できません。
ステップ実行で追っていくときちんとNULLで初期化はされているようなのですが・・・。
thisポインタがconstで渡されているのが非常に気になります。
メンバ変数を監視し、ある特定条件を満たしたら自分自身をdeleteし
また後でそのポインタを使いまわすようにするにはどのような処理にすればよいでしょうか。
ご教示お願いいたします。
#include<windows.h>
#include<stdio.h>
class hoge{
private:
int x;
public:
int add();
static int deletehoge(hoge *);//インスタンス廃棄用
static int newhoge(hoge **);//インスタンス生成用
};
//手続き用
int hoge::add(){
x = -1;// xに-1を代入
deletehoge(this);//自分自身のポインタを渡す
return 0;
}
//廃棄
int hoge::deletehoge(hoge *a){
if(a->x < 100){//xが100以下なので廃棄実効
printf("delete完了\n");
delete a;//廃棄
a = NULL;//新たに生成するためNULLを代入しておく
}
return 0;
}
int hoge::newhoge(hoge *hg[]){
for(int i = 0;i < 10;++i){
if(hg[i] == NULL){//NULLで初期化されているポインタを探しインスタンスを生成する
//a = NULLでポインタを初期化したはずだがここのif文が実行されない
printf("インスタンス生成\n");
hg[i] = new hoge();
}
}
return 0;
}
int main(){
hoge *hg[10];//ここのポインタ配列を使いまわしたい
//インスタンス生成
for(int i = 0;i < 10;++i){
hg[i] = new hoge();
}
//廃棄処理
for(int i = 0;i < 10;++i){
hg[i]->add();
}
hoge::newhoge(hg);//インスタンスを生成
return 0;
}