Mas_Tan

Site blog for Tan

No Praise For Colorful


Welcome To My Blog

C++ 面试


layout: post title: C++ 面试 date: 2018-07-14 15:59:28.000000000 +09:00 —

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

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

class Animal{
  public:
      template<typename T>
      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.

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

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

最近的文章

Crontab 定时任务,维护进程

在服务器上跑一个进程,不过几天后可能会突然挂掉,可能是 RAM 不够等原因,具体还要排查。。。 于是就想写一个定时任务,每分钟检查这个进程还在不在,如果已经挂掉的话,就重新启动.Crontabcrontab 是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。是一个周期性运行的命令,在约定的时间执行已经计划好的工作.cron 定时规则包含以下几个参数 m h dom mon dow command m(分钟) h(小时) ...…

继续阅读
更早的文章

Nginx 配置反向代理

最近要搭个EOS节点,然后在AWS租用了个 Ubuntu服务器,运维大哥呢,只帮我开了三个端口 80,22,443当我用启动eos服务节点时,修改了启动的端口为80,如下http-server-address = 0.0.0.0:80但是启动起来报错,排查也没发现 80 端口被占用。后来换 443 也不行。反正默认的 8888 端口时可以的。两个办法: 让运维给我开放 8888 端口。 利用 nginx 做反向代理,将80 端口代理给本地的 8888 端口。最终选择 第二个办法,不是因...…

继续阅读