gpt4 book ai didi

c++ - 如何删除没有构造函数的派生类的对象

转载 作者:行者123 更新时间:2023-11-30 01:43:04 26 4
gpt4 key购买 nike

给定这个程序:

struct Base
{
virtual void f() {}
};

struct Derived:public Base
{
};

int main()
{
Derived* c = new Derived;
delete c;
}

gcc-4.4 -Wall 很好,但 gcc-5.2 -Wall 发出警告:删除具有非虚拟析构函数的多态类类型“派生”的对象可能会导致未定义的行为 [-Wdelete-non-virtual-dtor]

我看到了the discussion on deleting a base pointer但就我而言,它是派生对象。我认为这是一个 gcc 错误,但显然 GNU doesn't think so .有没有办法在不更改基类定义的情况下消除警告?

最佳答案

GCC 有权发出该警告。为什么?因为除非你声明 Derivedfinal , 某人完全有可能创建 MoreDerivedDerived 派生的类型.此时,您删除了一个 Derived指针很可能是无效的。

添加 virtual Base 的析构函数没有真正的缺点。是的,析构函数将是一个虚拟调用。但这几乎不会成为性能瓶颈。

关于c++ - 如何删除没有构造函数的派生类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com