C++面经漏洞汇总

Posted lxy-xf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++面经漏洞汇总相关的知识,希望对你有一定的参考价值。

C++中几种智能指针的区别

为什么要使用智能指针:

智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间

1. auto_ptr(c++98的方案,cpp11已经抛弃)

弃用原因:当两个智能指针都指向同一个堆空间时,每个智能指针都会delete一下这个堆空间,这会导致未定义行为。同时由于使用了转移语义(就是下面的p1将控制权转给p2),在使用p1会出现内存崩溃。

采用所有权模式。

auto_ptr< string> p1 (new string ("I reigned lonely as a cloud.”));
auto_ptr<string> p2;
p2 = p1; //auto_ptr不会报错.

此时不会报错,p2剥夺了p1的所有权,但是当程序运行时访问p1将会报错。所以auto_ptr的缺点是:存在潜在的内存崩溃问题!

针对这个问题有3种策略:
1、进行深度复制,有几个指针就复制几个对象;
2、制定指针专有权的概念。即,只有一个智能指针能真正指向一个特定的对象,也只有该指针能析构这个对象所占用的空间,直到把这个指针赋给另一个指针,后一个指针才能真正指向这个对象,而前一个指针就不再起作用了,从而避免了两次delete而导致的未定义行为这个概念比较适合auto_ptr和unique_ptr,但后者要求更严格(unique_ptr)
3、记录性智能指针。即,有一个智能指针指向某对象,就把这个对象上的智能指针数加1,有一个指针不再指向该对象,就把这个对象上的智能指针数减1。只有当最后一个智能指针生命期结束了,才真正释放对象空间。(shared_ptr)

以上是关于C++面经漏洞汇总的主要内容,如果未能解决你的问题,请参考以下文章

熬夜肝完了,腾讯前端,Java,C++,Go面经汇总(全)

最强阿里巴巴历年经典面试题汇总:C++研发岗

最强阿里巴巴历年经典面试题汇总:C++研发岗

腾讯校招历年经典面试汇总:C++研发岗

网易校园招聘历年经典面试题汇总:C++研发岗

今日头条校园招聘历年经典面试题汇总:C++研发岗