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

时间:2015-05-20 21:46:30

标签: c++ struct

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

struct Person {
  String name;
  int age;
};

现在我创建一个新对象:

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

pushstack

 stack.push(*p);

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

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

可悲的是,delete current语句引发了某种异常。

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

3 个答案:

答案 0 :(得分:8)

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

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

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

或只是

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

然后

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

因此,无需直接处理内存管理。

答案 1 :(得分:4)

当您将某些东西推到堆叠上时,您不会推动原始对象 - 您推送该对象的副本。要释放原始对象的内存,您需要在推动它之后立即执行此操作。

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

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

答案 2 :(得分:0)

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

相关问题