kar*_*hik 0 c++ mfc stl vector
Vector :: Clear()将擦除向量数组中的元素.
问题是如果我们在向量列表中传递对象,那么Clear()将删除对象的内存或不删除对象的内存.
我发布我的样本:
CData *m_data = new CData();
vector<CData*> m_logdata;
m_logdata.push_back(m_data);
m_logdata.clear();
Run Code Online (Sandbox Code Playgroud)
这段代码会删除m_data分配的内存,还是只删除向量列表中的元素?
此致,karthik
没有矢量,但有一个矢量.
vector.clear()将破坏向量中的对象.如果这些对象是指针,则不会删除指向的对象.
struct Foo {
};
vector<Foo> vec1;
vector<Foo *> vec2;
vec1.push_back(Foo());
vec2.push_back(new Foo());
vec1.clear(); // Will destruct the Foo instances
vec2.clear(); // Will not delete the pointed to Foo instances
Run Code Online (Sandbox Code Playgroud)
在您编辑的帖子上:
m_logdata.clear();
Run Code Online (Sandbox Code Playgroud)
这不会删除您的CData实例.它只会破坏指针,这是一个无操作.
编辑:回应评论.
for (size_t p = 0; p < m_logdata.size(); ++p)
delete m_logdata[p];
m_logdata.clear();
Run Code Online (Sandbox Code Playgroud)