C++注解|智能指针与原生指针
C++ 注解
智能指针
C++11,再管理动态分配内存上,引入的智能指针。哥们理解为,是原生指针raw point 的高级封装。
C++98 就提供了auto_ptr,但是,到了C++11后,不再建议使用,摒弃了auto_ptr,而是提供了unique_ptr , share_ptr与weak_ptr等
动态内存分配,能够有效的避免内存泄露的问题
多线程,多进程的动态分配内存中,常常可能因为某些原因,在释放内存,delete指针指向的内存之前,崩溃,异常捕获,造成内存泄露,悬挂指针问题
(当然还有可能忘记delete,这个就是程序员的问题了)
智能指针,将无需记住稍后释放这些new的内存,在智能指针过期时,这些内存将自动释放,你可以不用再担心释放问题(%90)
智能指针是具有线程安全的,shared指针中有个引用计数,并且引用计数的增加是原子操作。
需要注意的是,raw原生指针,与智能指针最好不要混用。
错误示例
1 | using namespace std; |
正常编译,但是运行就会出现段错误,
可见,uni_ptr 并不能知道自己指向的内存已经释放,然后自动释放的时候二次调用这个产生的悬挂指针.
同理 ,分别定义了两个唯一指针,有了原生指针的参与,并不能保证指向的值是唯一的,所以也会触发段错误。
1 | unique_ptr<double> ptr_uni1; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 icrad的博客!
评论