c++中创建类对象有三种方式,用代码显示如下:
#include <iostream>
using namespace std;
class A
{
private:
int n;
public:
A(int m):n(m)
{
}
~A(){}
};
int main()
{
A a(1); //栈中分配
A b = A(1); //栈中分配
A* c = new A(1); //堆中分配
delete c;
return 0;
}
第一种和第二种都是在栈上分配内存,分别是隐式和显示创建。第三种是在堆上分配。这里涉及到栈上和堆上分配内存的区别。
栈和堆区别:
- 堆和栈最大可分配的内存的大小:栈内存是系统分配,在linux中可用ulimit -s查看,一般不超过8M。而堆内存最大可达到4G。
- 堆和栈的内存管理方式:栈是系统数据结构,创建和释放都是系统操作。而堆是有开发者自己用malloc,free或者new delete来进行创建和释放操作的。
- 堆和栈内存分配效率:栈内存分配是系统操作,有专门的寄存器存放地址,效率非常高。堆分配是按照c++库函数来操作的,从寻址到分配是非常复杂的过程,效率也极低