问题标签 [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++ - 虚拟析构函数签名
对于虚拟机制,我们需要在基类和派生类中具有相同的方法名称。然而,在虚拟析构函数的情况下,名称可以不同。
任何人都可以解释虚拟机制(V-Ptr,V-Table)如何支持/使用不同命名的析构函数。
c++ - 当派生类的析构函数是非虚拟的时,为什么在派生对象上调用基类析构函数?
为什么在下面的示例中调用了所有析构函数 , , ~D()
?~C()
~B()
~A()
只有一个虚拟析构函数: of A
。
这是代码:
qt - QMainWindow 析构函数
为什么 QMainWindow 的析构函数不是虚拟的?如果我从 QMainWindow 继承一个类 MainWindow 并在其上有一些指针属性,我无法使用 MainWindow 的析构函数删除内存。
c++ - 调用抽象类的析构函数
我有三个班。
Father
是抽象的,也是Grandfather
。Son
不是抽象的。
如果我这样做:
然后这样做:
如何确保调用Father
and的析构函数Grandfather
?
c++ - 需要确保构造函数/析构函数被调用一次。但是“错误:析构函数是私有的”
我有以下代码
根据许多建议,析构函数是私有的,只能在程序结束时调用一次。
但我有编译器错误:
当然,我可以公开构造函数和/或析构函数,并且没有任何类似的错误。但我需要确保它们都被调用一次且仅调用一次。
如何?
c++ - 如何在 Xcode 中导出虚拟析构函数?
我正在开发一个包含两个模块的示例项目:A 和 B(链接到 A),使用 Xcode 4.4。
在模块 A 中,符号被编译器标志 -fvisibility=hidden 隐藏。我有一个类,其析构函数是虚拟的并导出:
它被实现为:
在模块 B 中,MyUtx 从 utx 派生如下:
虽然,我总是得到以下模块 B 的链接错误:
如果 utx 的析构函数是非虚拟的,问题就消失了。
c++ - 在 C++ 中实现虚拟析构函数
我开始学习 c++,但我被困在析构函数中。我们需要实现一个向量,这就是我目前所拥有的。
给出了接口,我需要实现它。但这与 C 和 Java 有很大的不同,我有点迷茫。
在第二个练习中,我们需要使用 a) 以前的 Vector 实现作为派生类和 b) Vector 作为组合类来实现类似的东西,所以也许我们会在其中一种方法中使用虚拟析构函数?
c++ - 为什么抽象类的默认析构函数不是虚拟的?
考虑
在这一点上,它绝对A
是一个抽象类,并且永远不会被自己实例化。那么为什么标准不要求自动生成的析构函数也必须是虚拟的呢?
每次我需要在我的接口类中定义一个虚拟的虚拟描述符时,我都会问自己这个问题,但我不明白为什么 commetee 不这样做。
那么问题来了:为什么抽象类中生成的析构函数不是虚拟的?
c++ - 基础和派生虚拟析构函数的效果
我对多个虚拟析构函数有了一些重新考虑,尤其是。在阅读http://blogs.msdn.com/b/oldnewthing/archive/2004/05/07/127826.aspx之后。
假设我有
在 cpp 文件中,在每个析构函数中,我正在删除相应的_logger
指针
这会按我的预期工作,没有内存泄漏吗?
c++ - Keil:虚拟或受保护的析构函数和堆
我正在将 Keil 4 与 ARM 工具集一起用于 Cortex M3(如果这很重要的话)。我尝试了这个简单的代码:
如果我在本地(在 main 内部)创建 Derived 的实例,一切都很好:调试工作正常,程序大小约为 300 字节。
如果我创建 Derived 的静态或全局实例,程序大小会增加到 1000 字节,并且调试会话会在 BKPT 指令上停止。
我整理出这是因为堆大小设置为其默认值(零)。当我添加一些堆时,调试开始工作。
使析构函数受保护但非虚拟会导致相同的行为。使通常的方法 virtual 没有。
所以,我的问题是:为什么编译器在这种情况下需要堆?
Vtab 是静态创建的(我检查过),全局对象也应该是静态的。当我不需要动态分配时,再浪费 700 个字节用于堆分配代码(以及堆本身的空间)有点愚蠢。
(我将析构函数设为虚拟以防止出现警告。)