簡単な質問です。私はグーグルで調べて、すでにいくつかの答えを見つけましたが、私は少し偏執的であるため、確認したいと思います.
次の状況を考慮してください。
struct CoordLocation
{
float X;
float Y;
float Z;
};
int main()
{
CoordLocation *coord = new CoordLocation();
delete coord;
return 0;
}
delete を呼び出すと、フィールド X、Y、Z で使用されているメモリもクリアされますか? 私が見つけたいくつかの回答は、この方法で実際に参照されているオブジェクトではなく、 POINTER を削除するだけだと述べています。仮に...
struct CoordLocation
{
float *X;
float *Y;
float *Z;
};
int main()
{
CoordLocation *coord = new CoordLocation();
delete coord;
return 0;
}
構造体のコンストラクタ/デストラクタ内の各オブジェクトのメモリを手動で解放するとどうなりますか?
struct CoordLocation
{
CoordLocation()
{
*X = new float;
*Y = new float;
*Z = new float;
}
~CoordLocation()
{
delete X; delete Y; delete Z;
}
float *X;
float *Y;
float *Z;
};
int main()
{
CoordLocation *coord = new CoordLocation();
delete coord;
return 0;
}
次のような単純な状況であることに気付きました。
float *a = new float;
*a = 5.0f;
printf("%f", *a);
delete a;
printf("%f", &a);
printf は 5.0 を出力するため、a が指す変数は正確には破棄されません。
したがって、私の質問は次のとおりです。この場合、構造体で使用されているすべてのメモリを確実に解放するにはどうすればよいですか (メモリ リークがないように)。
struct CoordLocation
{
float X;
float Y;
float Z;
};
int main()
{
CoordLocation *coord = new CoordLocation();
delete coord;
return 0;
}
ありがとう!