删除矢量

Dan*_*iel -1 c++ memory-management vector

如果a vector包含一堆使用new然后解除引用而分配的元素,那么在vector删除这些元素时会释放这些元素的内存吗?例如:

vector<Obj> a = *(new vector<Obj>());
a.push_back(*(new Obj()));
delete &a;
Run Code Online (Sandbox Code Playgroud)

Obj创建的新内容是否已取消分配?

Moo*_*ice 10

这一切都将发生可怕的错误.首先,第一行上的赋值"a"现在在堆栈上(不是堆),并且您的new语句分配的内存现在丢失,泄露,消失.

其次,重新出现同样的情况.将构造并复制Obj().你的第二个记忆new永远在空间和时间的深处迷失.

然后尝试删除堆栈上分配的对象.这是程序崩溃和烧毁的地方,所有内存丢失都是无关紧要的.


Pet*_*ker 5

vector<Obj> a;
Obj o;
a.push_back(o);
Run Code Online (Sandbox Code Playgroud)

注意:没有newdelete在视线内.C++不是Java.