use*_*679 3 c++ algorithm pointers memory-management
我在我的程序中有一个vector<Points*> points;(size: 6有所有独特的Points),其中我迭代通过点在屏幕上绘制一些东西.但是,根据我的新要求,我要将向量的长度增加到size: 14.
要添加的新项目必须来自之前的6 Points,所以我没有分配新的内存,而是考虑使用前面的指针,如下所示:
while (currentSize < 14){
int rndPoint = getRandomPoint(0, 5); //random index to choose from the vector
points->push_back(points[randPoint]);
}
Run Code Online (Sandbox Code Playgroud)
在类的析构函数中,当我要释放内存时,我正在执行以下操作:
for(int i=0;i<points.size(); ++i){
if(points[i] != NULL){
delete (points[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试退出程序时 - 我在循环中遇到访问冲突错误(特别是在i达到索引时6).当我已经用删除的6个独特点delete,为什么是条件if (points[i] != NULL)造成true的i=6,7...13?
使用智能指针.如果您的程序源包含delete,并且它不在智能指针的删除器中,则您的程序会被破坏.(为什么你会这样做而不是std::default_deleter?).
2014年度"最佳智能指针奖"的获奖者,在您需要复制指针的时候std::unique_ptr,将获得荣誉奖std::shared_ptr.
规则零意味着您几乎不需要自己实现析构函数/等,因为您应该始终使用通用资源管理类来自行管理它.