在方法内创建的对象
Objects created inside a method
我想知道存储的本地方法中的对象在哪里实例化?就我的知识而言,对象存储在堆中,它们的引用存储在堆栈中。如果是这样,那么当功能返回时,对对象的引用不再存在(因为弹出了函数的本地堆栈框架),对象是否停留在堆中,或者我们必须手动删除它(或使用垃圾收集,如java)?
这取决于您打算使用该对象的操作,如果您返回对象,则寿命会延长。如果将其作为临时创建,则有两个可能的结果。
-
如果使用
new
创建对象。如果您创建指向新对象的指针,则当方法不范围时,将删除指针。但是该对象仍导致内存泄漏,需要明确删除对象。 -
如果您不使用
new
。示波器结束时将删除该对象。
这两个结果都假定您不返回对象,而将其实例化为函数中的临时对象。
这是一些示例代码:
class ObjectClass {
public:
ObjectClass() {}
};
void myFunction() {
ObjectClass my_obj(); //memory is handled for you
ObjectClass * my_dynamic_obj = new ObjectClass();
delete my_dynamic_obj; //if delete is not called then
// the pointer my_dynamic_obj will be deleted but the object itself will remain
return;
}
main() {
myFunction();
return 0;
}
相关文章:
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 具有包含其他对象的类的对象创建顺序
- 为什么我们再次从结构对象创建结构变量?
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- 如何创建一个对象创建函数,该函数将由与其关联的名称调用?
- 如何为自定义模板对象创建专门的函数模板
- 对象创建错误的C++矢量
- 如何为Python Swigged C++对象创建和分配回调函数
- 在 C++ 中为 C 样式对象创建一个透明包装类
- 此类模板的对象创建如何工作?
- C++ 中的对象创建类型有什么区别?
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 如何仅通过父类对象限制对象创建
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 无法将类对象创建为另一个类的成员
- 如何从现有基类对象创建派生类对象
- 在 DTor 之前删除的静态对象创建的线程?
- C++:定义多个构造函数时的对象创建/销毁序列
- 从对象创建矢量包装器,该对象只允许使用索引访问向量
- 是否可以为CPP中的对象创建一组指针