基本的に私は構築時に配列を作成するクラスAを持っています。配列を作成するクラスへのポインタを削除する
class A
{
public:
A (float height, float width, BYTE* data)
{
setsize(height,width);
mydata = CreateNewBuffer(sizes);
setdata(data);
}
~A()
{
}
void setsize(float height, float width)
{
sizes.cx = width;
sizes.cy = height;
}
BYTE* CreateNewBuffer (SIZE sImage)
{
return new BYTE [sImage.cx * sImage.cy];
}
void setdata(BYTE* data)
{
memcpy(threatdata,data,sImage.cx * sImage.cy);
}
}
は、私は大きなクラスで、このクラスへのポインタを作成します。
3rdClass::instance()->myfunction(mypointer)
と関数の内部:私は機能を通過させた後、第三のクラスで初期化する
A* mypointer;
myfunction()クラスが構築されたことを示すブール値を設定します
mypointer = new A(height,width,data);
wasconstructed = true;
今度は、関数myfunction()
へのポインタを渡すときにクラスが既に構築されているかどうかを確認します。それが削除されていれば、メモリを失うことなく新しいクラスを作成します。
これを行うための適切な方法は何ですか:
私は
if (3rdClass::instance()->checkifconstructed()){
delete mypointer; //(or even delete [] mypointer but then i get heap corruption)
mypointer = NULL;
}
、のような基本的なものを試してみました。しかし、それは動作するようには思えません。
「私はそれを削除して、メモリを失うことなく新しいものを作成したい」とはどういう意味ですか?バッファーをリサイクルしますか? – Bernhard
はい、問題は高さと幅が毎回変わるということでした – Simon