gpt4 book ai didi

c++ - 通过指向基类的指针删除没有新成员的派生类

转载 作者:行者123 更新时间:2023-12-01 14:48:26 25 4
gpt4 key购买 nike

通过指向其基类的指针删除派生类实例的常见做法是在基类中声明一个虚拟析构函数。但是我很好奇如果派生类没有向基类添加新成员并且基类的析构函数是非虚拟的,会发生什么。

想象一下,下面的设计。基类有一个 protected 构造函数,所以不能直接创建。这里派生类的唯一目的是允许某些工厂类创建基类。工厂实例化派生类并返回指向基类的指针。最终,当指向的实例被用户删除时,派生类的析构函数当然不会被调用,但我不确定是否有必要,因为派生类没有添加新数据。我想弄清楚在这种情况下可能出现什么样的问题(如果有的话)。

class Base
{
public:
~Base() = default;

protected:
Base(int x, int y): x(x), y(y) {}

private:
int x, y;
};

class Factory
{
// privately declared Derived class exposes protected constructor from the Base class
class Derived : public Base
{
public:
Derived(int x, int y) : Base(x, y) {}
~Derived() = default;
};

public:

Base* create(int x, int y)
{
return new Derived(x, y);
}
}; // Factory


int main()
{
Factory factory;
Base *base = factory.create(3, 4);
delete base;
}

最佳答案

But I am curious what happens in case the derived class adds no new members to the base class and the base class' destructor is non-virtual.



无论派生类的成员如何,程序的行为都将是未定义的。

关于c++ - 通过指向基类的指针删除没有新成员的派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60831103/

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