C++建立对象的三种方式

 

1ios

2程序员

3算法

4数据结构

5函数

6spa

7操作系统

8指针

9code

10对象

11

12

13

14

15

16

17

18

19

#include <iostream> 

using namespace std; 

class

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; 

  第一种和第二种没什么区别,一个隐式调用,一个显式调用,二者都是在进程虚拟地址空间中的栈中分配内存,而第三种使用了new,在堆中分配了内存,而栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放。采用第三种方式时,必须注意一下几点问题:

  1. new建立类对象须要指针接收,一处初始化,多处使用
  2. new建立类对象使用完需delete销毁
  3. new建立对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
  4. new对象指针用途普遍,好比做为函数返回值、函数参数等
  5. 频繁调用场合并不适合new,就像new申请和释放内存同样
  6. 栈的大小远小于堆的大
  7. 栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率 比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照必定的算法(具体的算法能够参考数据结构/操做系统)在 堆内存中搜索可用的足够大小的空间,若是没有足够大小的空间(多是因为内存碎片太多),就有可能调用系统功能去增长程序数据段的内存空间,这样就有机会 分 到足够大小的内存,而后进行返回。显然,堆的效率比栈要低得多
相关文章
相关标签/搜索