我是新手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声明引发了某种例外.
我做错了什么?谢谢你的帮助.
你需要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)
所以,不需要直接处理内存管理.
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |