c++类的实例化,有没有new的区别

来源:互联网 发布:tasty大龙小龙知乎 编辑:程序博客网 时间:2024/06/05 08:01
A a; //等同于 A a = A();A * a = new a();

 以上两种方式皆可实现类的实例化,有new的区别在于:

1.前者在堆栈中分配内存,后者为动态内存分配,在一般应用中是没有什么区别的,但动态内存分配会使对象的可控性增强。

2.不加new在堆栈中分配内存

3.大程序用new,小程序直接申请

4.只是把对象分配在堆栈内存中

5.new必须delete删除,不用new系统会自动回收内存

注:

//实例化的对象在超出作用域后会调用析构函数A a; A a = A();//new 实例化的对象必须得调用delete 后才能调用析构函数A *a = new A();

 

 

class A{public:int m_i;};

在C++中

A a;是分配在栈上。也可以A* pa = new A;分配在堆上。

而在JAVA 或C#中

通过

A a = new A();

分配在托管堆上。

不论是用哪种方式,只要变量是public的都可以直接访问。

 

原创粉丝点击