私は単純なレイ トレーサーに取り組んでいますが、メモリ不足の問題が発生しています。Visual Studio 用の Visual Leak Detector をダウンロードしたところ、次の関数がメモリ リークを引き起こしていることがわかりました。ただし、これらがリークと見なされる理由はわかりません。
Point* Point::copy() {
Point* result = new Point(x, y, z);
return result;
}
Point* Point::crossProduct(Point* other) {
double crossX = y*(*other).getZ() - z*(*other).getY();
double crossY = z*(*other).getX() - x*(*other).getZ();
double crossZ = x*(*other).getY() - y*(*other).getX();
Point* cross = new Point(crossX, crossY, crossZ);
return cross;
}
ここに示すコピー関数を作成して使用した後、コピー コンストラクターについて初めて発見したことに注意してください。プロジェクトをやり直す場合は、代わりにコピー コンストラクターを使用します。関数を使用するときは、使用している変数に対して必ず「削除」を呼び出します。例えば:
Point* n = AB.crossProduct(&AC);
...
delete n;
これでメモリリークを処理する必要があると考えるのは間違っていますか? Visual Leak Detector は、別のファイルにあるため、リークが処理されたことを認識できないのでしょうか?