explicit是干什么用的?
可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。
内存溢出有那些因素?
内存不够
new与malloc的区别,delet和free的区别?
1. new/delete是C++里才有的,而new/delete会调用构造析构函数。
2. new/delete通常来说是操作符,就是”+”,”-“一样。
3. new/delete是可以重载的,而重载之后,就成为了函数。
4. malloc在申请内存的时候,必须要提供申请的长度,而返回的指针是void*型,必须要强转才能成为需要的类型。
5. 当new/delete在类中被重载的时候,可以自定义申请过程,比如记录所申请内存的总长度,以及跟踪每个对象的指针。
6. C++默认的new/delete操作符内部,其实也调用了malloc/free这两个函数。
共同点:
1. 都必须配对使用,不仅不能混合使用,而且用了malloc就得free,不然会内存泄露。但是如果是new数组,用free的话,不会内存泄露,但是不建议这么干。
2. 都是申请内存,释放内存,free和delete可以释放NULL指针。
异常机制是怎么回事?
1.异常的抛出和处理主要使用了以下三个关键字: try、 throw 、 catch
2. 如果抛出的异常一直没有函数捕获(catch),则会一直上传到c++运行系统那里,导致整个程序的终止
3. 析构函数抛异常的缺陷(内存、资源泄露)
迭代器删除元素的会发生什么?
1.连续内存序列容器(vector,string,deque)
序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。
vector c;
for(vector::iterator it = c.begin(); it != c.end();)
{
if(need_delete())
it = c.erase(it);
else
++it;
}
2.关联容器(set,multiset,map,multimap)
c++11前:关联容器的erase方法没有返回值,被删除的迭代器失效,所以删除前必须确保能得到下一个迭代器,可以用“后置递增迭代器”技术。
map
面试杂项
最新推荐文章于 2023-04-20 07:39:14 发布