问题标签 [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 投票
4 回答
4139 浏览

c++ - 虚拟析构函数和未定义的行为

这个问题不同于“我何时/为什么应该使用virtual析构函数?'。

问题

  1. 这可以归类为未定义的行为(我们知道肯定不会~D()被调用)吗?
  2. 如果~D()是空的怎么办。它会以任何方式影响代码吗?
  3. 在使用new[]/ delete[]withB* p;时,无论析构函数~D()如何,都肯定不会被调用。virtual它是未定义的行为还是定义明确的行为?
0 投票
5 回答
4218 浏览

c++ - 使用非虚拟析构函数有什么具体原因吗?

据我所知,任何被指定为具有子类的类都应使用虚拟析构函数声明,因此在通过指针访问它们时可以正确销毁类实例。

但是为什么甚至可以用非虚拟析构函数声明这样的类呢?我相信编译器可以决定何时使用虚拟析构函数。那么,这是 C++ 设计疏忽,还是我遗漏了什么?

0 投票
3 回答
4725 浏览

c++ - 没有虚拟析构函数可能存在内存泄漏?

我在 derv 类中没有虚拟析构函数,它是否只删除 derv 对象的基础部分?

0 投票
4 回答
175 浏览

c++ - 从具有非虚拟父级的虚拟类继承的正确方法

我编写了这个使用三种类型的测试代码:struct One是没有虚拟成员的普通类型,struct Two : One具有纯虚函数和虚拟析构函数,并struct Three : Two实现了Two的接口。

不出所料,输出是这样的:

三::test()
~One()

除了将每个析构函数设为虚拟之外,还有什么方法可以解决这个问题?还是程序员应该小心不要遇到这种情况?我觉得编译时没有警告很奇怪。

0 投票
1 回答
74 浏览

c++ - 从具有非虚拟父级的虚拟类继承的正确方法(续)

我的问题是建立在这个问题上的:正确的方法从具有非虚拟父级的虚拟类继承

我的理解是否正确,在问题中描述的情况下,新分配对象的三和二部分因为没有被破坏而泄漏?

来源:

0 投票
4 回答
12921 浏览

c++ - 将受保护的析构函数设为虚拟是否有用?

如果我将Parent' 的析构函数设为虚拟,则会出现错误,那么将受保护的析构函数设为虚拟的目的是什么?

0 投票
1 回答
562 浏览

c++ - 虚拟破坏者?

得到几个错误,它是一个带有非虚拟析构函数的虚拟函数。我该如何解决这个错误?它在 g++ 4.6.x 中工作,但我需要它在旧版本的 g++ 上工作。:(

0 投票
5 回答
395 浏览

c++ - 我的基类中有一个虚拟析构函数和一个数组。我怎样才能让它工作?

前任:

我的基类中有一个虚拟析构函数和一个数组。如果基类析构函数被派生类析构函数覆盖,则基数组不会被删除。什么是好的解决方案?

0 投票
3 回答
106 浏览

c++ - 为什么在 g++ 中缺少虚拟 d-tor 不会破坏派生类的堆栈分配成员?

我有以下代码:

我期望以下输出:

但实际上(代码是用 编译的gccMessage: Bar据我所知barMessage没有被正确破坏。为什么?

AFAIK 非虚拟 d-tor 仅影响派生类的 dtor 调用 - 它永远不会被调用,但是派生类的堆栈分配成员呢?

谢谢,

PS我已经知道不推荐使用的std::auto_ptr<>()用法:)

0 投票
3 回答
20906 浏览

oop - 没有虚拟构造函数,只有虚拟析构函数

如果我们没有虚拟构造函数,那么为什么我们有虚拟析构函数?构造函数也可以是虚拟的吗?