问题标签 [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.

0 投票
2 回答
1236 浏览

c++ - 基类虚拟析构函数访问冲突

抱歉,如果已经问过这个问题,但我很难搜索析构函数和访问冲突 =)

这是场景的 C++ 伪代码:


在 DLL1 中(使用 /MT 编译)


在链接到 DLL1 的 DLL2 中

到底是怎么回事?我是不是脑子有问题?如果我将 A 的析构函数设为非虚拟的,那么一切正常——甚至 A 和 B 的析构函数也被调用(好像 A 的析构函数是虚拟的——这是因为它是公共的吗?)。

不过,我的主要问题是 - 为什么当基类的析构函数被声明为虚拟时会出现访问冲突?

0 投票
5 回答
697 浏览

c++ - C++ 析构函数行为

我有一个关于 C++ 析构函数行为的问题,更多的是出于好奇。我有以下课程:

基数.h

小鬼

现在的问题是,有了这段代码,一切都完美无缺。但是,当我将 BImp 的析构函数设为虚拟时,在调用 AImp::MethodA 时,BImp 类的数据(m_data1 和 m_data2)似乎未初始化。我已经检查并确保包含的数据在构建时是正确的,所以我想知道这背后的原因可能是什么......

干杯!

编辑:param1 实际上是 MethodA 中对 B 的引用。看起来我对我的真实代码进行了过多的清理!

Edit2:重新排列代码以显示两个不同的文件。测试了这段代码可以编译,不错。对于那个很抱歉!

0 投票
6 回答
5586 浏览

c++ - 虚拟析构函数:不动态分配内存时是否需要?

如果我的类没有动态分配任何内存,我们是否需要一个虚拟析构函数?

例如

在这种情况下,我们需要将 A 的析构函数标记为 virtual 吗?

0 投票
5 回答
27012 浏览

c++ - 虚拟析构函数是继承的吗?

如果我有一个带有虚拟析构函数的基类。有一个派生类来声明一个虚拟析构函数吗?

具体问题:

  1. 1) 和 2) 一样吗?2)是因为它的基础而自动虚拟还是“停止”虚拟?
  2. 如果派生的析构函数无关,可以省略吗?
  3. 声明派生析构函数的最佳实践是什么?声明它是虚拟的、非虚拟的还是尽可能省略它?
0 投票
2 回答
1040 浏览

c++ - 派生对象后调用两次基本析构函数?

嘿,为什么在这个程序结束时调用了两次基本析构函数?

0 投票
2 回答
1169 浏览

c++ - C++ 虚拟析构函数

在创建原型类时,我将析构函数布置为:

在库中完成课程时,我注意到我无法添加“虚拟”。这是正常的,是考虑到虚拟的还是我做错了什么?

例如; 当我尝试这样做时,我得到一个编译器错误:

相反,这样做有效:

我的问题是,由于我不必virtual在析构函数的最终代码编写中包含析构函数,析构函数是否仍然表现为虚拟析构函数(因为它是虚拟的原型)?

0 投票
3 回答
5196 浏览

c++ - 我还需要在子类方法上指定 virtual 吗?

这可能以前在 SO 上被问过,但我找不到类似的问题。

考虑以下类层次结构:

Daughter1Daughter2类有区别吗?

virtual在子类析构函数/方法上指定/不指定的后果是什么?

0 投票
2 回答
6660 浏览

c++ - 纯抽象基类上的虚拟析构函数

我有

GCC 坚持说我有

我不明白为什么。纯粹的界面就是界面(duh)。析构函数是接口具体实现者内部实现细节的一部分;它不构成接口的一部分。我了解整个切片问题(或者至少我认为我了解)

所以我的问题是 - 海湾合作委员会坚持这样做是否正确,如果是,为什么?

0 投票
1 回答
308 浏览

c++ - 我是否需要 boost::ublas 矩阵的虚拟析构函数?

使用 boost::ublas 矩阵时是否需要虚拟析构函数?

顺便说一句,我的类是一个模板类。

0 投票
8 回答
6714 浏览

c++ - 使用虚拟的破坏顺序

当我使用虚函数时,有人可以帮助我破坏的顺序是什么。它是从基类开始,然后是派生类吗?