VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 543|回复: 3

[分享] 寻求解决方案!何时delete?

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2017-8-17 15:50:20 | 显示全部楼层 |阅读模式
上周同事问了我一个技术问题,我整理简化了一下发布出来,看看大家是否遇到同类的问题呢?

一个类对象,我是 new 出来的,例如:
  1. CStudent *pStudent = new CStudent();
复制代码


我将这个类对象分别放到 1个 或者 多个 vector 容器中,在之后的某个时间,这1个或者多个 vector 可能会发生变动,这时就需要把 vector 中的 pStudent 移出容器。
如果只是一个 vector 中有 pStudent 还好处理,从 vector 中移除之后,直接进行 delete pStudent; 操作就可以了。如果有多个 vector 都用到了 pStudent 呢?

如果 vector A 不用 pStudent 了,但是 vector B 还要用 pStudent,那么从 vector A 移除之后直接 delete pStudent 会发生问题的。vector B 用不了了。如果 vector B 再访问 pStudent 就会访问到野指针,程序直接崩溃。

有的网友说了,在从 vector A 中移除之后,在 delete pStudent 之前进行下判断,分别到 vector B、vector C、vector D。。。中进行遍历一遍,看看其他的几个 vector 中是否有 pStudent,如果有就不 delete pStudent,如果没有就 delete pStudent。这种做法是可以,不过就是效率太低了,我要分别到 vector B、vector C、vector D。。。中去遍历,如果数据量很大呢,需要的时间就会很长。那有没有更好的办法呢?

当时我想到了一种引用计数的方法,应该还可以,大家可以参考下。
即:在 类 CStudent 中加一个引用计数,int m_ref,默认值是0,被加入到一个 vector 中之后就给这个引用计数 +1,当从某个 vector 移除之后就将这个引用计数 -1,之后加个判断,当这个 引用计数减为 0 的时候就进行 delete 操作,否则不进行。

大家也再想想还有什么更好的解决方案呢?




上一篇:数据结构基础-线性表与模板类
下一篇:前段时间发了个链式存储的模板类线性表;今天再发个线性存储的模板类线性表

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

29_avatar_middle
online_vip CDocking 发表于 2017-8-17 16:12:57 | 显示全部楼层
支持老大

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
在线会员 besteast 发表于 2017-8-17 22:48:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-9-26 21:33

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表