1.关于构造函数初始化调用顺序的问题。

         首先是父类和子类的,首先调用父类的构造函数,然后调用子类的构造函数。但是对于子类中有其他类型的数据成员的时候,会在调用该类的构造函数之前,调用其数据成员的构造函数。

class A{

public:

    A(){

        cout << "A::A()" << endl;

    }

    virtual ~A(){

        cout << "A::~A()" <<endl;

    }

};

class C{

public:

    C(){

        cout << "C::C()" << endl;

    }

    ~C(){

        cout << "C::~C()" << endl;

    }

};

class B:public A{

public:

    B(){

        cout << "B::B()" << endl;

    }

    ~B(){

        cout << "B::~B()" << endl;

    }

protected:

    C c;

};

B b;

输出的是

A::A();

C::C();

B::B();

B::~B();

C::~C();

A::~A();

同时对于删除指针的话,调用析构函数的话,如果父类的析构函数声明方式不是virtual的话,就不会执行子类的析构函数,对象无法完全释放。当父类的析构函数是virtual就可以。

2.

posted on 2013-11-05 22:44  追梦的飞飞  阅读(260)  评论(0编辑  收藏  举报