Learning ROS for Robotics Programming - Second Edition
14.9 析构函数和虚拟析构函数
构造函数不能是虚的(在附录 B 中的技术只类似于虚构造函数)。但析构函数能够且常常必须是虚的。构造函数有其特殊的工作。它首先调用基本构造函数,然后调用在继承顺序中的更晚派生的构造函数,如此一块一块地把对象拼起来。类似的,析构函数也有一个特殊的工作——它必须拆卸可能属于某类层次的对象。为了做这些工作,它必须按照构造函数调用相反的顺序,调用所有的析构函数。这就是,析构函数自最晚派生的类开始,并向上到基类。这是安全且合理的:当前的析构函数能知道基类成员仍是有效的,因为它知道它是从哪一个派生而来的,但不知道从它派生出哪些。应当记住,构造函数和析构函数是必须遵守调用层次唯一的地方。在所有其他函数中,只是某个函数被调用,而无论它是虚的还是非虚的。同一个函数的基类版本在通常的函数中被调用(无论虚否)的唯一的方法是直接地调用这个函数。通常,析构函数的活动是很正常的。但是,如果我们想通过指向某个对象的基类的指针操纵这个对象(这就是,通过它的一般接口操纵这个对象),会发生什么现象呢?这在面向对象编程中是一个值得探讨的问题。
对于更多关于析构函数的作用,可以参考析构函数的作用什么是析构函数。深层次解析可以参阅深析C++析构函数和C#析构函数。想要详细了解虚析构函数示例的读者,可以查看虚析构函数示例。还有关于构造函数与析构函数的更多实例和解释。
用户评论