考虑以下内容: class A { public: virtual void foo () = 0; }; 目前显然可以看出A是一个抽象类,永远不会独立实例化。那么为什么标准没有要求自动生成的析构函数也必须是虚拟的呢? 每当我需要在我的接口类中定义一个虚拟的空析构函数时,我就会问...
/*Child is inherited from Parent*/ class Parent { public: Parent () //Constructor { cout << "\n Parent constructor call...
在这个答案中,Ryan直接调用了虚析构函数。我已经在VS2010中测试了代码,并且它正确地调用了所有析构函数(使用日志记录进行测试)。这样做实际上是有效的吗?这种方法有什么问题、缺陷甚至优点? 我只能把它看作是一种重置实际类型的方法,即使它们没有覆盖虚拟的reset函数,因为它们至少必须在析...
为什么C++不会默认将至少有一个其他虚函数的类的析构函数设置为虚函数?在这种情况下,添加虚析构函数对我来说没有成本,而不拥有虚析构函数几乎总是一个错误。 C ++0x会解决这个问题吗?
我对大部分的对象导向编程(OOP)理论有扎实的了解,但有一件事情经常让我困惑,那就是虚析构函数。 我曾以为无论如何,析构函数都会被调用,并且每个对象都要调用一次。 什么时候需要将析构函数声明为虚函数?为什么需要这样做呢?
如果我有一个带有虚析构函数的基类,那么派生类是否需要声明虚析构函数?class base { public: virtual ~base () {} }; class derived : base { public: virtual ~derived () {} // 1) ...
据我所知,任何被指定为有子类的类都应该声明为虚析构函数,这样当通过指针访问它们时,类实例可以被正确地销毁。 但是为什么可以声明非虚析构函数的类呢?我相信编译器可以决定何时使用虚析构函数。那么,这是C++设计上的疏忽还是我漏掉了什么?
在一个独立的情境中(没有标准库,例如在操作系统开发中),使用g++会发生以下现象:class Base { public: virtual ~Base() {} }; class Derived : public Base { public: ~Derived() {} }; ...
我有一组大量的继承类(criteria),它们都继承自一个基类(criterion)。这是criterion的代码:class criterion { public: virtual unsigned __int32 getPriorityClass() const = 0; ...