释放指向结构的指针的内存
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);
我是 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);