c++ 内存申请释放,构造函数,析构函数,执行顺序

来源:互联网 发布:windows驱动器被锁定 编辑:程序博客网 时间:2024/05/21 02:53

内存释放,申请与析构,构造函数

这几个函数的执行顺序是什么,我们已经知道对于普通的对象,会先执行内存申请函数,然后执行构造函数,然后执行析构函数,最后执行内存释放函数。

但是,对于有继承关系的对象,他们的执行顺序是什么呢?下面以一个例子说明:

#include <iostream>class A{public:    int a;    void *operator new(std::size_t size){        std::cout<<"allocate A "<<size<<std::endl; ::operator new(size);    }    A(){        std::cout<<"constructor of A"<<std::endl;    }    void operator delete(void *ptr,std::size_t size){        //std::cout<<"deallocate b"<<std::endl;    }    ~A(){        //std::cout<<"deconstructor of A"<<std::endl;    }};class B:public A{public:    int b;    int c;    void *operator new(std::size_t size){        std::cout<<"allocate B "<<size<<std::endl; ::operator new(size);    }    B(){        std::cout<<"constructor of B"<<std::endl;    }    void operator delete(void *ptr,std::size_t size){        std::cout<<"deallocate a"<<std::endl;    }    ~B(){        std::cout<<"deconstructor of B"<<std::endl;    }};int main(){    B *pb=new B();    delete pb;    return 0;}/*output:allocate B 12constructor of Aconstructor of Bdeconstructor of Bdeallocate a*/

执行顺序一目了然。

0 0