vector :: clear:内存问题

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

Eri*_*rik 7

没有矢量,但有一个矢量.

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)