[原][C++]拒绝智能指针与指针混用,常见智能指针问题

公司一个非专科的程序在开发过程中有些毛躁,但是又想使用些新学的技术

这天他正调试呢,发现有一个BUG怎么也找不到原因。

用的好好的内存怎么就突然被删除了呢,好好的指针,怎么就访问越界了呢

 

没办法,他只能请教公司的老员工

老员工看了他代码一眼就说“智能指针和正常指针不能混用!”

然后,将所有指针都改为正常指针就可以了

 

这位非专科的程序员,虽然有些毛躁,但是还是很好学,他就问老员工,这是啥原因?

老员工解释:

 

你在一个函数中使用智能指针,在用的时候会有引用计数增加,这个时候指针指向的内存是有值的。

接着你将一个正常指针指向这块内存区域,都能正常访问,但是他没有通知智能指针增加引用计数,这就埋下伏笔!

然后,你的智能指针不再被使用,(出了作用域等)引用计数减完,然后C++会自动删除指针所指向的内存区域,并释放!

这时,正常指针并不知道自己所指向的区域已经被删除了,就变成了野指针,接下就是崩溃啦~~~~

 

posted @ 2019-08-01 18:02  南水之源  阅读(603)  评论(0编辑  收藏  举报