【发布时间】:2017-04-24 21:37:42
【问题描述】:
此运算符重载是否存在内存泄漏?
我的想法在代码下面..(MotorVehicle 是一个没有分配的类)
class myClass{
private:
MotorVehicle **vehicle;
int vehNo;
public:
myClass() : vehicle(), vehNo(0){ } // vehicle() -> NULL
~myClass()
{
for(int i = 0; i < vehNo; i++)
delete vehicle[i];
}
.
.
.
myClass &operator+=(MotorVehicle *veh)
{
MotorVehicle **temp = new MotorVehicle*[vehNo + 1];
for(int i = 0; i < vehNo; i++)
temp[i] = vehicle[i];
temp[vehNo] = veh;
//for(int i = 0; i < vehNo; i++)
// delete vehicle[i];
vehNo++;
vehicle = new MotorVehicle*[vehNo];
for(int i = 0; i < vehNo; i++)
vehicle[i] = temp[i];
return *this;
}
};
我有一组 MotorVehicle (**tmp) 类型的指针,我为其分配了内存,并将它们中的每一个设置为指向车辆指向的内容 + 最后一个指向车辆指向的内容。由于我将它们设置为指向什么车辆指向,因此我不会在某处丢失数据,并且可以在将来取消分配它们。然后我再次为车辆分配内存以返回它们指向 +1 对象。但是我分配了两次内存并且都包含相同事物的位置,所以如果我删除其中一个,那么另一个将没有任何东西(会挂在某个地方)..但最后内存将被删除与析构函数? 我想对了吗?如何绕过为同一件事分配内存 2 次?
P.s 是的手动:#(任何可能以任何方式帮助我的材料将不胜感激)
【问题讨论】:
-
为什么不直接使用
std::vector? -
@PaulMcKenzie 这是因为讲课.. :/
-
如果你想手动操作,我建议创建一个真正的动态数组类而不是
MotorVehicle类。如果没有,您将一遍又一遍地为这个类、那个类、另一个类编写相同的代码——只需创建一个向量类,并在您未来的所有作业中使用它。然后你的MotorVehichle类看起来就像你实际使用了std::vector一样简单。 -
您有内存泄漏。
temp永远不会被释放。但是如果你使用std::vector会更容易
标签: c++ memory-management