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