显式删除C++中的对象

Pre*_*ety 1 c++

我上课了myclass.在main函数中,我myclass在每次迭代中创建了类型的对象,并希望在每次迭代后删除它们.我还没有动态创建对象.我可以显式删除它们,因为迭代结束后我不需要它们.

class myclass{
    int value;
    void do_function();
};

int main()
{
    for(int i=0;i<count;i++)
    { 
        myclass obj;
        obj.do_function();
    }
}
Run Code Online (Sandbox Code Playgroud)

obj一次迭代后不需要该对象,但内存仍然存在.我怎样才能释放那段记忆?

meJ*_*rew 8

您不必显式删除它们,因为在创建它们时,myclass obj;它们是在堆栈上创建的,并在每次迭代后删除.

当程序在对象堆栈上实例化后到达第一个大括号时,它会删除它,在您的情况下:

myclass obj;
obj.do_function();
} // Here the obj is deleted
Run Code Online (Sandbox Code Playgroud)

下面是一些关于堆栈如何工作的示例和解释,以及堆,以便让您在需要自己释放内存时更好地理解,何时不需要.

注意:我只使用堆栈堆的概念来建议如何相对于它们的生命周期处理对象,就像堆栈中的对象在离开作用域后应该被释放一样,并且堆的对象存在直到它被明确释放.正如评论中所提到的,这些概念在标准C++中不予考虑,因为程序可以在不支持这些类型内存的环境中运行.虽然编译器尊重C++程序的这些规则.

  • C++标准没有像_stack_或_heap_这样的术语概念. (2认同)