动态分配内存(指针数组)

时间:2017-04-24 21:37:42

标签: c++ memory-management

此运算符重载是否存在内存泄漏?

我的想法是在代码之下..(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 p是的,手动:#(任何可以帮助我的材料都会非常感激)

1 个答案:

答案 0 :(得分:0)

是的,您正在泄漏temp

更好的尝试:

myClass &operator+=(MotorVehicle *veh)
{
    MotorVehicle **temp = new MotorVehicle*[vehNo + 1];
    for(int i = 0; i < vehNo; i++)
        temp[i] = vehicle[i];
    temp[vehNo] = veh;
    vehNo++;
    delete[] vehicle;
    vehicle = temp;

    return *this;
}

更好的解决方案:使用std::vector