【发布时间】:2015-03-18 01:35:36
【问题描述】:
我是 C++ 的新手,我正面临内存泄漏问题,这让我怀疑我可能没有正确理解某些内容。
我有:
.h 文件
class DeliveryVehicle{
public:
//c'tor
DeliveryVehicle(const char* ID, Quality quality);
//d'tor
virtual ~DeliveryVehicle();
...
protected:
VehicleParcelQueue parcelQueue_;
}
.c 文件
DeliveryVehicle::~DeliveryVehicle(){
while(!parcelQueue_.empty()) parcelQueue_.pop();
// pop() calls removed element destructor
}
我有一个派生类,我在其中依赖默认析构函数,而不是显式实现析构函数。
我想知道,如果我不使用“new”在派生类中分配内存可以吗?
另外,我实现了自己的固定大小队列,它从 STL 继承了基类队列:
.h 文件
class VehicleParcelQueue:public std::queue<Parcel*>{
public:
const static int MaxParcelsNum = 5;
Result push(Parcel*);
};
.cpp 文件
typedef enum result{SUCCESS = 1,FAILURE = 0} Result;
Result VehicleParcelQueue::push(Parcel* pParcel){
if (size() >= 5) return FAILURE;
else{
queue<Parcel*>::push(pParcel);
return SUCCESS;
}
可以看出,同样在这种情况下,我没有显式地实现析构函数。 我是否容易出现内存泄漏?
也许 pop 不是为 Parcle 调用 delete 而是对指针调用析构函数? 谢谢
【问题讨论】:
-
您提供的代码没有内存泄漏,但您也没有展示完整的示例。
-
您是否有不能使用
queue<Parcel>的原因?没有指针的代码比有指针的代码简单。 -
在此处完成后,您可能希望进一步审查您的代码。试试 codereview.stackexchange.com 我发现了几个潜在的问题。
标签: c++ destructor virtual-destructor