加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 防止双指针删除

发布时间:2020-12-16 10:10:23 所属栏目:百科 来源:网络整理
导读:我有一个矢量 Points *点; (大小:6,所有独特的点)在我的程序中,我迭代通过点在屏幕上绘制一些东西.但是,根据我的新要求,我要将向量的长度增加到大小:14. 要添加的新项目必须来自之前的6个点,所以我没有分配新内存,而是考虑使用前面的指针,如下所示: while
我有一个矢量< Points *>点; (大小:6,所有独特的点)在我的程序中,我迭代通过点在屏幕上绘制一些东西.但是,根据我的新要求,我要将向量的长度增加到大小:14.

要添加的新项目必须来自之前的6个点,所以我没有分配新内存,而是考虑使用前面的指针,如下所示:

while (currentSize < 14){
  int rndPoint = getRandomPoint(0,5); //random index to choose from the vector
  points->push_back(points[randPoint]);
}

在类的析构函数中,当我要释放内存时,我正在执行以下操作:

for(int i=0;i<points.size(); ++i){
  if(points[i] != NULL){
    delete (points[i]);
  }
}

但是,当我尝试退出程序时 – 我在循环中遇到访问冲突错误(特别是当我到达索引6时).当我已经通过使用删除删除了6个唯一点时,为什么条件if(points [i]!= NULL)导致i = 6,7 … 13为真?

解决方法

使用智能指针.如果您的程序源包含delete,并且它不在智能指针的删除器中,则程序将被破坏. (为什么你会这样做而不是std :: default_deleter?).

2014年“最佳智能指针奖”的获胜者是std :: unique_ptr,当你只需复制指针时,std :: shared_ptr值得一提.

规则零意味着您几乎不需要自己实现析构函数/等,因为您应该始终使用通用资源管理类来自行管理它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读