我在我的代码中使用动态内存分配,并且在尝试删除指向子类的指针时遇到问题。我发现原来分配的内存在使用delete
关键字的时候并没有被释放。该功能适用于原始基类。
这是一个问题,因为我在 arduino 上运行代码并且 RAM 很快被吃光然后崩溃。
这是一些示例代码:
class Base
{
public:
Base(){
objPtr = new SomeObject;
}
~Base(){
delete objPtr;
}
SomeObject* objPtr;
};
class Sub : public Base
{
public:
Sub(){
objPtr = new SomeObject;
}
};
// this works fine
int main()
{
for (int n=0;n<100;n++) // or any arbitrary number
{
Base* basePtr = new Base;
delete basePtr;
}
return 0;
}
// this crashes the arduino (runs out of RAM)
int main()
{
for (int n=0;n<100;n++) // or any arbitrary number
{
Sub* subPtr = new Sub;
delete subPtr;
}
return 0;
}
我想这与基类中析构函数的语法有关。即使我为子类创建了一个自定义析构函数,也会出现同样的问题。
有任何想法吗?