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

Free the memory of a pointer to a struct

我是 C++ 的新手并实现了以下 struct

struct Person {
  String name;
  int age;
};

现在我创建一个新对象:

 Person *p = new Person();
 p->name = "name";
 p->age = 211;

push 它到 stack:

 stack.push(*p);

我有一个 while(!stack.empty()) 表达式,我在其中处理我压入堆栈的每个元素。
现在我在哪里释放内存?在 while 循环中,我执行以下操作:

Person *current = &stack.front();
stack.pop();
// do stuff
delete current;

遗憾的是,delete current 语句抛出某种异常。

我做错了什么?感谢您的帮助。

推入堆栈后需要delete p。堆栈存储了自己压入的对象的副本,因此弹出后无需对其进行任何操作。

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

Person p = {"name", 211};
...
stack.push(p);

或者只是

stack.push(Person{"name", 211});

然后

Person current = stack.front();
stack.pop();

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

当您将某些东西压入堆栈时,您不会压入原始对象 - 您压入的是该对象的 副本。要释放原始对象的内存,您需要在推送后立即执行此操作。

或者您可以完全跳过它并且不首先使用 new 创建对象:

Person p;
p.name = "name";
p.age = 211;
stack.push(p);

你不需要做指针。如果必须,请使用智能指针为您释放内存:
std::unique_ptr<Person> p(new Person);