作者amy10062003 (徘徊在抉择之间)
看板C_and_CPP
标题[问题] vector删除问题
时间Wed Dec 14 22:07:58 2016
开发平台(Platform): (Ex: Win10, Linux, ...)
Win7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
std::vector
问题(Question):
assign value完之後 最後如何delete
喂入的资料(Input):
会有5个structure A
里面有一个float 以及另一结构4份资料
预期的正确结果(Expected Output):
资料memory都清空
错误结果(Wrong Output):
资料没有全放掉
程式码(Code):(请善用置底文网页, 记得排版)
struct point
{
int X;
int Y;
};
struct A
{
float fSpeed;
std::vector<point*>pointVec;
};
// Assign value
A* pA = new A[5];
for(int i = 0 ; i < 5 ; i++)
{
pA[i]->fSpeed = 2.0;
for(int nPointIndex = 0 ; nPointIndex < 4 ; nPointIndex++)
{
point* pPoint = new point();
pPoint.X = ...
pPoint.Y = ...
pA[i]->pointVec.push_back(pPoint);
}
}
// Delete
Method 1
if(pA)
{
delete [] pA;
pA = NULL;
}
Method 2
for(int i = 0 ; i < 5 ; i++)
{
auto itr = pA[i]->pointVec.begin();
for(; itr != pA[i]->pointVec.end(); itr++)
{
delete &itr;
}
}
补充说明(Supplement):
以上两种方法会都清空吗?
还是有没有更好的delete方式
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.240.175.113
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1481724480.A.52E.html
1F:推 Sirctal: 你都会auto了 怎麽不用range loop... 12/14 23:16
2F:→ Sirctal: 而且可以改用 smart_pointer阿... 12/14 23:19
3F:→ taies: 两个都要用 1删A 2删point 先2在1 12/15 02:39
4F:→ taies: 2怪怪的 delete *itr? 12/15 02:40
5F:推 steve1012: 没规定要用raw pointer 的话就用smart pointer 吧大大 12/15 09:08
6F:推 Sirctal: 另外问原PO 你这种方式是要实作Observer design pattern? 12/15 20:41
7F:→ Sirctal: goo.gl/MtzcrP 这边有类似你的应用 你可以看一下人家怎麽 12/15 20:42
8F:→ Sirctal: 释放记忆体的 12/15 20:42
9F:→ amy10062003: 好的 谢谢 再研究一下 12/15 23:29
10F:→ hunandy14: 都vec了就vec吧,刻意使用vec模拟吗QQ 12/18 14:48
11F:→ hunandy14: de [] 配 new [] 没有方括配没有方括 12/18 14:49