C++涉及向量的内存分配问题

The*_*uzz 5 c++ memory-management vector

vector< int > vect;
int *int_ptr = new int(10);
vect.push_back( *int_ptr );
Run Code Online (Sandbox Code Playgroud)

我认为每个"新"都需要在某个时候跟"删除",但clear()方法是否清理了这个内存?

这种做同样事情的方法怎么样:

vector< int > vect;
int int_var = 10;
vect.push_back( int_var );
Run Code Online (Sandbox Code Playgroud)

根据我的理解,clear()调用变量析构函数,但本例中的vect.push_back()方法都在向量上推送一个对象,而不是指针.那么使用int指针的第一个例子需要除了clear()以外的东西来清理内存吗?

Fre*_*son 5

第一种方法泄漏,因为向量永远不会占用分配的指针.实际上,它根本不包含指针,只包含值的副本.

第二种方法不泄漏,因为没有动态分配内存(除了向量内部 - 它将处理该内存本身).


Dav*_*ave 5

向量上按下push_back时,可以将数据的副本添加到向量中.因此,在这两种情况下,仍然需要释放原始数据.在第一种情况下,您需要删除它; 在第二种情况下,当它超出范围时,它将被堆栈指针"释放".