goo*_*ons 0 c++ polymorphism valgrind destructor memory-leaks
我有最奇怪的内存泄漏,我不知道为什么.我有一个抽象类如下:
class ClassA
{
public:
virtual ~ ClassA (){}
virtual void notify(ClassB*) = 0;
virtual void add(ClassB*) = 0;
};
class ClassC : public ClassA
{
public:
void notify(ClassB*)
{
//some cout statements
}
void add(ClassB*)
{
//some cout statements
}
};
int main()
{
ClassA *f = new ClassC();
delete f;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我编译代码并运行Valgrind时,它没有泄漏.但是,当我删除ClassA析构函数(或使其成为非虚拟)时,Valgrind将32字节报告为绝对丢失的内存.我不知道为什么会发生这种情况,因为我的析构函数什么也没做,而且没有成员变量.有任何想法吗?
编辑:我用U ++编译了Ubuntu 64位
是的,未定义的行为可能导致内存泄漏,这就是删除virtual
析构函数时发生的情况.
3)[...]在第一个备选(删除对象)中,如果操作数的静态类型与其动态类型不同,则静态类型应为操作数的动态类型的基类,静态类型应具有虚析构函数或行为未定义.[...]