草庐IT

C++ 不使用虚析构的后果及分析

很多C++方面的书籍都说明了虚析构的作用:保证派生类的析构函数被调用,并且使析构顺序与构造函数相反保证资源能够被正确释放很久一段时间以来,我一直认为第2点仅仅指的是:当派生类使用RAII手法时,如果派生类的析构没有被调用,就会产生资源泄露。就像下面的代码:#includestructA{A(){std::cout这段代码结果输出:A::AB::BA::~AB的析构函数没被调用,a->x没有被正确释放,产生了内存泄漏。后来发现在多重继承情况下,情况可能更加严重。例如以下代码:#includestructA1{A1():a1(0){}~A1(){std::cout输出:0x5cbeb00x5cbe

C++ 不使用虚析构的后果及分析

很多C++方面的书籍都说明了虚析构的作用:保证派生类的析构函数被调用,并且使析构顺序与构造函数相反保证资源能够被正确释放很久一段时间以来,我一直认为第2点仅仅指的是:当派生类使用RAII手法时,如果派生类的析构没有被调用,就会产生资源泄露。就像下面的代码:#includestructA{A(){std::cout这段代码结果输出:A::AB::BA::~AB的析构函数没被调用,a->x没有被正确释放,产生了内存泄漏。后来发现在多重继承情况下,情况可能更加严重。例如以下代码:#includestructA1{A1():a1(0){}~A1(){std::cout输出:0x5cbeb00x5cbe
78910