C++面试题

本文深入探讨了C++中的STL Map实现方式、对象内存布局、COM原理、智能指针的作用及实现、指针释放技巧、虚函数表的概念及其具体实现等关键主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1. STL中Map内部是怎么实现的?
答:用红黑树实现的

2. 对象在内存中是怎么存放的?
答:是不是这样,内存中一般存放成员变量,每个对象实例对应一份,所有对象对应一份函数列表,静态变量也只有一份。如果对象中有虚函数,每个对象还有一个虚表

3. 说说COM的原理和实现?
答:COM的原理就是定义一个统一的二进制接口,该接口由idl语言来定义,通过idl编译器可以将该二进制接口映射成不同的编程语言。在不同的编程语言下,只要实现了映射后的接口,相互之间就可以通信。因此可以实现二进制程度上的、跨编程语言的通信。

4. 为什么要用智能指针?是怎么实现的?
答:智能指针把指针的使用封装成对象的使用,使调用者不用关心资源的释放。通常的实现是使用模板类,在模板类创建时new对象,在模板类析构时delete对象,至少需要重载*和->。另外,在可共享的只能指针实现上还要使用引用计数。

5. 给你一个指针,并用new动态申请空间,在另一个函数中释放,不知道是申请的一个元素还是一个数组的情况下,怎么确定用delete还是delete []?
答:这个应该跟操作系统紧密相关。如果是在windows平台上,可以使用_msize获得申请空间的大小,跟元素的大小比较之后就可以确定用delete还是delete[]。

6. 虚函数是怎么实现的?
答:使用虚函数表,每个对象对应一份虚函数表。

7. 虚函数表又是怎样实现的?
答:不太清楚,需要再去看看Inside C++ Object Model。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值