⾯试官你好,⾸先,说⼀下为什么要使⽤智能指针:智能指针其作⽤是管理⼀个指针,避免咋
们程序员申请的空间在函数结束时忘记释放,造成内存泄漏这种情况滴发⽣。
然后使⽤智能指针可以很⼤程度上的避免这个问题,因为智能指针就是⼀个类,当超出了类的
作⽤域是,类会⾃动调⽤析构函数,析构函数会⾃动释放资源。所以智能指针的作⽤原理就是
在函数结束时⾃动释放内存空间,不需要⼿动释放内存空间。
常⽤接⼝
T 是模板参数, 也就是传⼊的类型;
get() ⽤来获取 auto_ptr 封装在内部的指针, 也就是获取原⽣指针;
operator()
重载
, operator->() 重载了->, operator=()重载了=;
realease() 将 auto_ptr 封装在内部的指针置为 nullptr, 但并不会破坏指针所指向的内容, 函
数返回的是内部指针置空之前的值;
直接释放封装的内部指针所指向的内存, 如果指定了 ptr 的值, 则将内部指针初始化为该值
(否则将其设置为nullptr;
下⾯分别说⼀下哪四种:
1、auto_ptr(C++98 的⽅案,C11 已抛弃)采⽤所有权模式。
此时不会报错,p2 剥夺了 p1 的所有权,但是当程序运⾏时访问 p1 将会报错。所以 auto_ptr
的缺点是:存在潜在的内存崩溃问题!
2、unique_ptr(替换 auto_ptr )
auto_ptr<std::string> p1 (new string ("hello"));
auto_ptr<std::string> p2;
p2 = p1; //auto_ptr 不会报错.