这个简单的代码会导致内存泄漏吗?

时间:2014-11-26 00:48:40

标签: c++ inheritance memory-leaks virtual destructor

假设您有以下C ++代码段:

class base {};
class derived : public base {
public:
    std::string str;
};

int main() {
    base *b = new derived();
    delete b;
}

这会泄漏,对吗?永远不会调用derived字符串的析构函数,因为base的析构函数未被标记为虚拟。或者我误解了什么?

1 个答案:

答案 0 :(得分:4)

您是delete - 通过base*类型的指针派生,base没有virtual析构函数。

那是Undefined Behavior (UB),这意味着任何事情都可能发生。

如果std::string已经分配了任何内存,那么会造成内存泄漏(想想短字符串优化,这意味着不需要为空字符串分配额外的内存),这是可能的(并且很可能)UB的表现,这不是可能发生的最坏情况。