C++ 一道腾讯面试题深入剖析

  发布时间:2019-04-10 17:13:12   作者:佚名   我要评论
这篇文章主要为大家介绍了C++ 一道腾讯面试题,深入剖析C++面向对象程序设计中关于指针成员变量的相关操作技巧,代码剖析深入浅出,具有一定代表性,需要的朋友可以参考下

腾讯面试题:

以下代码是否完全正确,执行可能得到的结果是____。

class A{
   int i;
};
class B{
   A *p;
public:
   B(){p=new A;}
   ~B(){delete p;}
};
void sayHello(B b){
}
int main(){
   B b;
   sayHello(b);
}

A.程序正常运行
B.程序编译错误
C.程序崩溃
D.程序死循环

分析
 

   代码中定义了两个类,类A、类B和一个全局函数sayHello。类A中定义一个int类型的成员变量。类B中定义了一个A*类型的成员变量,且类B在初始化的时候构造了类A的一个实例,在类B析构时释放了成员变量p(delete p)。全局函数sayHello的参数是类B的一个实例。
   首先程序中没有编译错误,也没有死循环(程序中没有循环哪里来的死循环)。有些初学者可能会说main函数没有写return 0,main函数不显性的写return,编译器也会帮你做的。
   那么根据我们这十几年应试教育考试的经验,这段代码出问题的概率很大,不卖关子了,直接说吧:当类中存在指针类型的成员变量时赋值和析构要格外注意,这道题的问题就出在类B对象b中的指针p被析构了两次。
   具体分析一下,当执行完成B b这句话后,在b中就构造了一个类A的指针对象p,当调用sayHello(b)函数时系统将会调用类B的赋值构造函数构造一个类B的实例bStep(为了方便下面的叙述随便起了一个名字)传入到sayHello函数中(问题就出在bStep这个实例中),这里当sayHello执行完成后,之前构造的实例bStep将被析构(执行delete p)。然后程序继续开心的执行,直到执行完main函数后系统将会析构b,当b被析构时将再次执行delete p。这样p就被析构了两遍导致程序崩溃。

我们把代码增加一些输出信息后大家就更容易看了:
 

class B{
A *p;
public:
B(){ printf("构造\n"); p = new A; }
~B(){ printf("析构\n"); delete p; }
B(const B &b){ printf("赋值构造\n"); }
};
void sayHello(B b){
}

int main()
{
B b;
sayHello(b);
}

相关文章

  • 腾讯公司c++面试小结

    这篇文章主要介绍了腾讯公司c++面试小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-03-02
  • C++ 面试题目(整理自牛客网)

    这篇文章主要介绍了 C++ 面试题目(整理自牛客网),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-02-13
  • 华为校招 C++岗面试经历总结【笔试+一面+二面+Offer】

    这篇文章主要介绍了华为校招 C++岗面试经历,总结分析了华为校招C++岗位的笔试题,以及一面、二面到最终拿到Offer的经历与相关经验感想,需要的朋友可以参考下
    2019-11-28
  • C++面试常见算法题与参考答案总结

    这篇文章主要介绍了C++面试常见算法题与参考答案,总结分析了C++面试中遇到的常见算法题与相应的参考答案,需要的朋友可以参考下
    2019-11-20
  • C++必备面试题与参考答案经典总结

    这篇文章主要介绍了C++必备面试题与参考答案,结合大量经典实例总结分析了C++面试过程中经常遇到的各种概念、原理、算法相关问题及参考答案,需要的朋友可以参考下
    2019-10-31
  • C/C++经典面试题(附答案)

    这篇文章主要介绍了C/C++经典面试题(附答案),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-10-23
  • C/C++求职者必备的20道面试题与参考答案解析

    这篇文章主要介绍了C/C++求职者必备的20道面试题与参考答案,总结分析了C/C++相关的常见概念、原理、知识点与注意事项,需要的朋友可以参考下
    2019-10-10
  • 腾讯的外包c++面试经历总结

    这篇文章主要介绍了腾讯的外包c++面试经历,总结记录了一次腾讯C++面试的经历,包括面试的流程、面试题目与相应的参考答案,需要的朋友可以参考下
    2019-09-29
  • 阿里面试必会的20道C++面试题与参考答案解析

    这篇文章主要介绍了阿里面试必会的20道C++面试题与参考答案,涉及C++指针、面向对象、函数等相关特性与使用技巧,需要的朋友可以参考下
    2019-09-26
  • 经典C++笔试面试题目与参考答案100例

    这篇文章主要介绍了经典C++笔试题目与参考答案,总结分析了C++常见的各种面试题目,包含C++常见知识点、技术难点、算法等,需要的朋友可以参考下
    2019-09-10

最新评论