释放指向结构的指针的内存

opt*_*nal 1 c++ struct

我是新手C++并实施以下内容struct:

struct Person {
  String name;
  int age;
};
Run Code Online (Sandbox Code Playgroud)

现在我创建一个新对象:

 Person *p = new Person();
 p->name = "name";
 p->age = 211;
Run Code Online (Sandbox Code Playgroud)

push把它放到stack:

 stack.push(*p);
Run Code Online (Sandbox Code Playgroud)

我有一个while(!stack.empty())表达式,在那里我处理我推入堆栈的每个元素.
现在我在哪里释放内存?在while-loop中我做了以下事情:

Person *current = &stack.front();
stack.pop();
// do stuff
delete current;
Run Code Online (Sandbox Code Playgroud)

可悲的是,该delete current声明引发了某种例外.

我做错了什么?谢谢你的帮助.

jua*_*nza 8

你需要delete p在推入堆栈之后.堆栈存储了自己的对象副本,因此在弹出后不需要对它做任何事情.

但真正的解决方案是不new首先使用:

Person p = {"name", 211};
...
stack.push(p);
Run Code Online (Sandbox Code Playgroud)

要不就

stack.push(Person{"name", 211});
Run Code Online (Sandbox Code Playgroud)

然后

Person current = stack.front();
stack.pop();
Run Code Online (Sandbox Code Playgroud)

所以,不需要直接处理内存管理.