1.为什么要有new?
为什么要有new?为什么要动态创建对象?为什么有时候不用new,有时候又用new,比如:
- // Cocos2d-x3.x的Value类,大家都很熟悉了
- Value v = Value(100);
- // Cocos2d-x的Sprite类,也很属性了
- Sprite* sp = new Sprite();
为什么有些地方不用new,有些地方又要new呢?
这就涉及到自动存储和动态存储了。
2.自动存储(自动变量、局部变量)
自动存储,也叫做自动变量,比如int num = 10; 这个num就属于自动变量。
所谓自动,代表它会自动申请内存,也会自动释放内存,自动变量是保存在栈里的(后进先出)。
如果大家觉得很难理解,那么,换一个名称——局部变量。
这个好理解了吧?局部变量在离开函数,或者离开它所属的代码块之后,就会被释放。
而Value v = Value(100); 、int num = 10; 这些都是局部变量,一旦离开函数或者离开它的作用域,就会被释放。
比如把int num; 作为成员变量,那么,在这个类被释放的时候,num变量也会被释放。
这就是为什么我们在创建了这么多int、float等基本类型的变量之后,不需要去释放它们。
因为它们是自动被释放的。
3.动态存储
自动变量有很大的好处,那就是不需要我们去管内存方面的事情,但是,有时候我们不希望有这样的自动释放内存。
我们希望自己去控制什么时候释放对象,这时候就要用到new了。
我们都知道,new了之后,如果不调用相应delete的话,申请到的内存空间是永远都不会被释放的。
这就是动态存储了,我们自己来申请内存,自己来释放内存。
当然,内存泄露的罪魁祸首之一也正是new~!
因为正常人都会有疏忽的时候,并且当程序足够庞大、逻辑足够复杂的时候,有些地方调用了new,却疏忽了delete是再正常不过了。
当然,new的作用也许不仅于此,书上目前还没深入介绍,我也不多说,免得说错,毕竟C++还是需要严谨一些的~
我不敢乱吹水~