我一直在研究一个简单的光线追踪器,但我遇到了内存不足的问题。我为 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 是否无法识别泄漏已被处理,因为它位于单独的文件中?