堆对象
栈对象
由编译器自动分配和释放, 用于保存一些局部变量、函数的参数等。区别
栈对象的优势是在适当的时候自动生成,又在适当的时候自动销毁,不需要我们来费心;而且,栈对象的创建速度比堆对象快,因为分配堆对象时会调用 operator new操作, operator new 会采用某种内存空间搜索算法, 而该搜索过程可能很费时间, 栈对象的产生则仅仅需要移动栈顶指针。 但要注意, 栈空间容量较小(1~2M),所以体积较大的对象不适合在栈中分配,特别要注意递归函数最好不要使用栈对象,因为随着递归深度的增加,所需栈空间也会线性增加,当所需栈空间不够时,便会导致栈溢出,产生运行时错误。
因此,当你明确要使用的类型数量时, 使用 Object objec;
当你不知道你要创建的类型有多少个时, 使用 Object* object = new Object();栈对象相当于局部对象,堆对象相当于一种能共享于各函数或语句块的对象。栈对象在语句块执行完就自动销毁,堆对象需要手动销毁。