问题标签 [virtual-destructor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 虚拟析构函数和未定义的行为
这个问题不同于“我何时/为什么应该使用virtual
析构函数?'。
问题:
- 这可以归类为未定义的行为(我们知道肯定不会
~D()
被调用)吗? - 如果
~D()
是空的怎么办。它会以任何方式影响代码吗? - 在使用
new[]
/delete[]
withB* p;
时,无论析构函数~D()
如何,都肯定不会被调用。virtual
它是未定义的行为还是定义明确的行为?
c++ - 使用非虚拟析构函数有什么具体原因吗?
据我所知,任何被指定为具有子类的类都应使用虚拟析构函数声明,因此在通过指针访问它们时可以正确销毁类实例。
但是为什么甚至可以用非虚拟析构函数声明这样的类呢?我相信编译器可以决定何时使用虚拟析构函数。那么,这是 C++ 设计疏忽,还是我遗漏了什么?
c++ - 没有虚拟析构函数可能存在内存泄漏?
我在 derv 类中没有虚拟析构函数,它是否只删除 derv 对象的基础部分?
c++ - 从具有非虚拟父级的虚拟类继承的正确方法
我编写了这个使用三种类型的测试代码:struct One
是没有虚拟成员的普通类型,struct Two : One
具有纯虚函数和虚拟析构函数,并struct Three : Two
实现了Two
的接口。
不出所料,输出是这样的:
三::test()
~One()
除了将每个析构函数设为虚拟之外,还有什么方法可以解决这个问题?还是程序员应该小心不要遇到这种情况?我觉得编译时没有警告很奇怪。
c++ - 将受保护的析构函数设为虚拟是否有用?
如果我将Parent
' 的析构函数设为虚拟,则会出现错误,那么将受保护的析构函数设为虚拟的目的是什么?
c++ - 虚拟破坏者?
得到几个错误,它是一个带有非虚拟析构函数的虚拟函数。我该如何解决这个错误?它在 g++ 4.6.x 中工作,但我需要它在旧版本的 g++ 上工作。:(
c++ - 我的基类中有一个虚拟析构函数和一个数组。我怎样才能让它工作?
前任:
我的基类中有一个虚拟析构函数和一个数组。如果基类析构函数被派生类析构函数覆盖,则基数组不会被删除。什么是好的解决方案?
c++ - 为什么在 g++ 中缺少虚拟 d-tor 不会破坏派生类的堆栈分配成员?
我有以下代码:
我期望以下输出:
但实际上(代码是用 编译的gcc
)Message: Bar
据我所知barMessage
没有被正确破坏。为什么?
AFAIK 非虚拟 d-tor 仅影响派生类的 dtor 调用 - 它永远不会被调用,但是派生类的堆栈分配成员呢?
谢谢,
PS我已经知道不推荐使用的std::auto_ptr<>()
用法:)
oop - 没有虚拟构造函数,只有虚拟析构函数
如果我们没有虚拟构造函数,那么为什么我们有虚拟析构函数?构造函数也可以是虚拟的吗?