10得票1回答
使用模板化operator delete时出现虚析构函数问题

下面的类(带有虚析构函数)包含了一个模板化的 operator delete:struct S { virtual ~S() {} template <typename... Args> void operator delete(void* ptr, Arg...

10得票3回答
将类默认设置为`final`还是给它们一个虚析构函数?

如果作为基类使用(如果使用指向子类实例的基类指针或引用),则具有非虚析构函数的类是错误的来源。 随着C++11添加了final类,我想知道设置以下规则是否有意义: 每个类必须满足以下两个属性之一: 标记为 final (如果不希望被继承) 具有虚析构函数(如果要被继承) 可能有些情...

10得票2回答
在下面的程序中,派生类析构函数被声明为私有的,那么它是如何被调用的?

#include<iostream> class base { public: virtual ~base(){std::cout << "base\n";} }; class derived : public base { private:...

9得票3回答
C++11 接口纯虚析构函数

UPD。有一个标记显示这是这个问题的副本。但在那个问题中,OP询问如何使用default来定义纯虚析构函数。而这个问题是关于有什么区别。 在C++(尽可能使用最新的标准)中,使用空体实现定义纯虚析构函数和只使用空体(或默认值)之间的真正区别是什么? 变体1: class I1 { pub...

9得票2回答
虚函数可以进行内联吗?

如果我像这样定义一个类: class A{ public: A(){} virtual ~A(){} virtual void func(){} }; 这是否意味着虚析构函数和func都被内联了?

8得票3回答
为什么抽象类的默认析构函数不是虚函数?

考虑以下内容: class A { public: virtual void foo () = 0; }; 目前显然可以看出A是一个抽象类,永远不会独立实例化。那么为什么标准没有要求自动生成的析构函数也必须是虚拟的呢? 每当我需要在我的接口类中定义一个虚拟的空析构函数时,我就会问...

8得票3回答
直接调用(虚)析构函数是否有效?

在这个答案中,Ryan直接调用了虚析构函数。我已经在VS2010中测试了代码,并且它正确地调用了所有析构函数(使用日志记录进行测试)。这样做实际上是有效的吗?这种方法有什么问题、缺陷甚至优点? 我只能把它看作是一种重置实际类型的方法,即使它们没有覆盖虚拟的reset函数,因为它们至少必须在析...

7得票2回答
Clang在没有删除函数的情况下抱怨“无法覆盖已删除的函数”

在下面这段简单的代码片段中: #include <cstddef> struct B { virtual ~B() = default; static void operator delete(void *, int); static void * operator...

7得票1回答
虚析构函数如何影响decltype的行为

我创建了一个可选懒惰参数的标题(也可以在GitHub存储库中看到)。 (这不是基于标题的第一个问题。) 我有一个基类模板和两个派生类模板。 基类模板具有带有static_assert的protected构造函数。 此构造函数仅由特定派生类调用。 在static_assert内部,我正在使用d...

7得票4回答
关于纯虚析构函数的问题

如果我们定义了一个具有纯虚析构函数的抽象类,为什么我们必须在抽象类中提供析构函数的定义呢?