As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
7年前关闭。
当我们使用new创建对象时,它会分配在堆上。但是,我们要实例化的类的成员会发生什么?例如,
在此,x是一个对象,而y是Bar的实例。它们都分配在堆上吗?因此,如果foo F的对象是在方法内部本地创建的,那么当F超出范围时,y会发生什么?
另外,如果在堆上创建F,那么我们何时才能得出F在悬挂的结论(没人指向它)?因为,可能没有对F的引用,但可能有对Y的引用。
7年前关闭。
当我们使用new创建对象时,它会分配在堆上。但是,我们要实例化的类的成员会发生什么?例如,
class foo {
Bar x;
Bar *y;
foo() {
x = 10;
y = new Bar();
}
}
在此,x是一个对象,而y是Bar的实例。它们都分配在堆上吗?因此,如果foo F的对象是在方法内部本地创建的,那么当F超出范围时,y会发生什么?
另外,如果在堆上创建F,那么我们何时才能得出F在悬挂的结论(没人指向它)?因为,可能没有对F的引用,但可能有对Y的引用。
最佳答案
它们都分配在堆上吗?
是。
因此,如果foo F的对象是在方法内部本地创建的,那么当F超出范围时,y会发生什么?
没什么-由“ y”指向的实例将保持不变,因为您没有析构函数来提供清理。除非有其他引用(除非稍后将其清除),否则它将有效地成为内存泄漏。
另外,如果在堆上创建F,那么我们何时才能得出F在悬挂的结论(没人指向它)?
只要没有直接指向它,它就会晃来晃去。指向y
的其他内容不会改变F
不再可访问的事实。
这就是为什么您在这种情况下确实应该使用正确的终结处理的原因。如果没有对delete
的调用与每个对new
的调用相匹配,则会泄漏内存。
关于c++ - C++:在堆上分配的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11728213/
10-11 23:10