class CCom  
{
public:
CCom();
virtual ~CCom();
private:
};CCom::CCom()
{
if (1) 
{    
throw "can't open COM";  //(1)
}
         int i=0;                          //(2)
}                                          //(3)
-----------------------------
class haha
{
     void test();
}
void haha::test()
{
         CCom com;                        //(4)
}----------
----------
请问在(4)处构造出来了一个com对象来了没有。如果没有,那么这个时候com是一个null,还是一个不完整的对象?
构造函数要执行到题干中标识的哪一步才会构造出一个对象来呢?

解决方案 »

  1.   

    在(4)处构造出来了一个com对象来了 , 在执行完这条语句之前,对象只不过没有完成初始化 。
    可以说 (4) 一开始执行 就在内存中存在了 com 对象的躯体
      

  2.   

    可以,试下if (0) delete this;
      

  3.   

    (4)语句的执行后不会构造出一个com对象, 这个时候com不会存在在你运行test()时的栈空间中
      

  4.   

    在(4)处已经构造出一个对象,但是这个对象要到(3)处才构造完成,没有构造完成的对象是不能delete的。怎么就有那么多人自己没有搞明白就要信口开河呢?