构造函数和析构函数内部调用虚函数
来源:互联网 发布:poser软件下载 编辑:程序博客网 时间:2024/05/17 02:33
在构造函数内部调用虚函数
在普通的成员函数中调用虚函数时仍然是在运行时解析虚函数调用,因为此时对象并不知道其是属于成员函数所在的类或者是派生类。但是在构造函数中,虚机制没有作用,只有“本地”的虚函数会被调用,有两个原因:
首先,在构造函数中你只能知道基类对象已经初始化,但不知道谁将继承你,若调用派生类中对应的虚成员函数,则其可能操作尚未初始化的成员;
其次,构造函数首先初始化VPTR,此表只能根据基类和当前类来初始化,其在对象的生命周期里将不变,除非还有其他类以此为基类。如果紧接着调用下一步的构造函数,则其将VPTR指向自己的VTABLE,如此向后,直到最后一层。当进行虚函数调用时,只能利用当前的VPTR去获得对应的虚函数。
析构函数中调用虚函数
和构造函数一样,析构函数中调用虚函数,只能调用本地版本,基本原理通构造函数一样,唯一的区别是对于构造函数,类型信息尚不完全,调用析构函数时知道类型信息,但对应的虚函数不再可用,已经析构了。
//: C15:VirtualsInDestructors.cpp
// Virtual calls inside destructors
#include <iostream>
using namespace std;
class Base {
public:
virtual ~Base() {
cout << "Base1()/n";
f();
}
virtual void f() { cout << "Base::f()/n"; }
};
class Derived : public Base {
public:
~Derived() { cout << "~Derived()/n"; }
void f() { cout << "Derived::f()/n"; }
};
int main() {
Base* bp = new Derived; // Upcast
delete bp;
} ///:~
运行结果:
~Derived()/n
Base1()/n
Base::f()/n
- 构造函数和析构函数内部调用虚函数
- 构造函数和析构函数中的虚函数调用
- 构造函数和析构函数中的虚函数调用
- 构造和析构函数中绝不调用虚函数
- 构造函数、析构函数中调用虚函数
- 在构造函数/析构函数中调用虚函数
- 构造函数/析构函数不能调用虚函数
- 虚函数,构造函数,析构函数调用
- 在构造函数/析构函数中调用虚函数
- 构造函数,析构函数内调用虚函数问题
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数和析构函数,在C++中能否声明为虚函数?构造函数和析构函数里面能否调用虚函数?
- 构造函数和析构函数中调用虚函数有什么问题?
- 构造函数和析构函数中调用虚函数有什么问题?
- C++中构造函数和析构函数避免调用虚函数的问题 转载
- 【iOS知识学习】_iOS下SQLite的使用
- 核心数据库CoreData之NSFetchedResultsController
- Investigation of CircleCube Video Player (Day 6)
- Using Dynamic Vertex and Index Buffers
- Linux Samba 服务器配置(RedHat)
- 构造函数和析构函数内部调用虚函数
- 数据可视化工具Style Scope
- delete的使用
- 屌丝逆袭,YY缘何能突破QQ的包围圈?
- Mac下MySql卸载方法
- 情人的伤感抑郁QQ心情日志分享:我就这样简单的喜欢你
- direct顶点缓存与索引缓存Direct3D
- ExtJS Date(日期)对象常用函数
- 基于mjpg-streamer网络视频服务器移植