C++智能指针总结(面试常问)
1.智能指针的实现原理
智能指针的实现原理就是在一个类的内部封装了类对象的指针,然后在析构函数里对我们的类对象指针进行释放,因为类的析构是在类对象生命期结束时自动调用的,这样我们就省去了手动释放内存的操作,避免忘记手动释放导致的内存泄漏。
2. C++11四种智能指针总结
2.1 auto_ptr:
-
auto_ptr
以前是用在C98中,C++11被抛弃,头文件一般用来作为独占指针 -
auto_ptr
被赋值或者拷贝后,失去对原指针的管理 -
auto_ptr
不能管理数组指针,因为auto_ptr
的内部实现中,析构函数中删除对象使用delete
而不是delete[]
,释放内存的时候仅释放了数组的第一个元素的空间,会造成内存泄漏。 -
auto_ptr
不能作为容器对象,因为STL容器中的元素经常要支持拷贝,赋值等操作。
2.2 unique_ptr:
-
C++11中用来替代
auto_ptr
-
拷贝构造和赋值运算符被禁用,不能进行拷贝构造和赋值运算
-
虽然禁用了拷贝构造和赋值运算符,但
unique_ptr