假设我定义了一个这样的类:
class foo {
private:
std::vector< int* > v;
public:
...
void bar1()
{
for (int i = 0; i < 10; i++) {
int *a = new int;
v.push_back( a );
}
};
void bar2()
{
std::vector< int >::iterator it = v.begin();
for ( ; it != v.end(); it++ )
std::cout << (*it);
v.clear();
}
};
简而言之,我推回向量中的一些指针,然后清除向量。问题是,这段代码有内存泄漏吗?我的意思是通过清除向量,指针是否被正确删除?
是的,除非删除指针,否则代码存在内存泄漏。如果foo
类拥有指针,它有责任删除它们。您应该在清除向量之前执行此操作,否则您将丢失需要取消分配的内存的句柄。
for (auto p : v)
{
delete p;
}
v.clear();
您可以通过使用来完全避免内存管理问题std::vector
一个合适的智能指针 http://en.wikipedia.org/wiki/Smart_pointer.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)