标题:构标题:构造函数,析构函数,赋值函数调用顺序


C++里,对象的这3个函数的调用顺序为:基类构造--〉本构造--〉赋值--〉本析构--〉基类析构

class A

{

public :

      A(int i = 0){ m_i = i;cout 《m_i 《 "A::A()" 《 endl;}

     ~A(){cout 《 m_i《"A::~A()\n";}

     void f(){cout 《 m_i 《 "A::f()\n";}

private:

      int m_i;

};

 

class B:public A

{

public:

      A m_A;

     B(int i):m_A(i)

     {

         cout《 "B::B()\n";

     }

     ~B(){cout 《"B::~B()\n";}

     void f(){cout 《 "B::f()\n";}

};

void main( void )

{

       A *pa = new B(10);

     pa--〉f();

     delete pa;

     return;

}

 

写出上述代码的输出,并说明原因。

利用构造函数与析构函数的调用顺序,可以设计一个面向对象的自动锁CAutoLock,保证多线程安全(注意,此题是阿里巴巴技术面试题):

class CLock

{

public:

         void Lock() {EnterCriticalSection(&m_sec);}

         void Unlock() {LeaveCriticalSection(&m_sec);}

         CLock () {InitializeCriticalSection(&m_sec);}

         ~ CLock () {DeleteCriticalSection(&m_sec);}

         CRITICAL_SECTION m_sec;

};

 

class CAutoLock

{

public:

    CAutoLock(CLock  * lpLock) :

      m_pLock (lpLock)

      {

          m_pLock ->Lock();

      }

     

      ~CAutoLock()

      {

          m_pLock ->Unlock();

      }

     

protected:

 

private:

    CLock * m_pLock;

};

 

CLock m_lock;

CAutoLock(&m_lock);



看文字不过瘾?点击我,进入周哥教IT视频教学
麦洛科菲长期致力于IT安全技术的推广与普及,我们更专业!我们的学员已经广泛就职于BAT360等各大IT互联网公司。详情请参考我们的 业界反馈 《周哥教IT.C语言深学活用》视频

我们的微信公众号,敬请关注