我一直在做一個簡單的光線跟蹤器,我遇到了內存不足的問題。我爲Visual Studio下載了Visual Leak Detector,它告訴我下面的函數會導致內存泄漏。我不知道爲什麼這些會被認爲不過泄漏:創建和使用這裏顯示的複印功能後C++這些是否構成內存泄漏?
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;
}
注意,我只發現了約拷貝構造函數。如果我要重做項目,我會使用複製構造函數。現在,當我使用函數時,我確定在我使用的任何變量上調用「delete」。例如:
Point* n = AB.crossProduct(&AC);
...
delete n;
我錯了,認爲這應該處理任何內存泄漏?視覺泄漏檢測器只是無法識別泄漏已被處理,因爲它在一個單獨的文件?
使用智能指針,以避免內存泄漏。儘管你的假設是正確的。 – 2014-09-23 03:03:01
爲什麼你使用'new'?您可以通過返回像這些值這樣的簡單對象來修復可能存在的任何泄漏(並提高性能,可能數量巨大)。 – 2014-09-23 03:04:05
重寫你的代碼以不使用'new'。 – 2014-09-23 03:45:07