C++ 面试

为什么C++member function template不能是virtual的 ?

一个类的成员函数不能既是 template 又是 virtual 的

class Animal{
  public:
      template
      virtual void make_sound(){
        //...
      }
};

因为C++的编译与链接模型是"分离"的 (至少是部分原因吧)。

  • Unix/C开始,一个C/C++程序就可以被分开编译,然后用一个linker链接起来。这种模型有一个问题,就是各个编译单元可能对另一个编译单元一无所知。
  • 一个 function template最后到底会被 instantiate为多少个函数,要等整个程序(所有的编译单元)全部被编译完成才知道。
  • 同时,virtual function的实现大多利用了一个"虚函数表"的东西,这种实现中,一个类的内存布局(或者说虚函数表的内存布局)需要在这个类编译完成的时候就被完全确定。

所以,由上面的矛盾可知,C++member function 不能既是 template 又是 virtual 的。


reverse 一个字符串

手动循环还是使用系统库函数
是否返回一个新的字符串,或者只是返回原来的
是否支持 UnicodeUTF-8


C++ 和其他语言有什么不同

主观判断应聘者的答案


shared_ptr 内部实现,(是否是多线程安全的)

shared_ptr 本身是线程安全,但指向的对象操作不是线程安全


多线程中栈与堆是公有的还是私有的

栈私有, 堆公有


Hash 表的原理

处理关键字 key 冲突的办法 : 开放定址法, 链地址法


什么是拷贝构造函数(如何调用)

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:

  • 通过使用另一个同类型的对象来初始化新创建的对象。
  • 复制对象把它作为参数传递给函数。
  • 复制对象,并从函数返回这个对象。

请问C++的类和C里面的struct有什么区别?

C++中的类具有成员保护功能,并且具有继承,多态这类特点,而c里的struct没有
c里面的struct没有成员函数,不能继承,派生等等.


什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?你通常采用哪些方法来避免和减少这类错误?

用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元即为内存泄露。

使用的时候要记得指针的长度。

malloc的时候得确定在那里free.

对指针赋值的时候应该注意被赋值指针需要不需要释放.

动态分配内存的指针最好不要再次赋值.

你可能感兴趣的:(C++ 面试)