zoukankan      html  css  js  c++  java
  • 重温堆和拷贝构造函数

    堆:
    C++程序的内存格局通常分为四个区:
    1.全局数据区(data area)
    2.代码区(code area)
    3.栈区(stack area)
    4.堆区(即自由存储区)(heap area)

    全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数所分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间都被作为堆区。
    C++的new\delete机制比malloc()/free()更加方便。运算符new分配堆内存,如果成功,则返回只向该内存的空间,如果失败,则返回NULL。所以每次使用运算符new动态分配内存时,都应测试new的返回指针值,以防分配失败。
    从堆上分配对象数组,只能调用默认的构造函数,不能调用其他任何构造函数。

    使用堆空间往往由于:
    1.直到运行时才能直到需要多少对象空间;
    2.不知道对象的生存期到底有多长;
    3.直到运行时才知道一个对象需要多少内存空间。

    拷贝构造函数:
    当一个对象创建时,分配了资源,这时,就需要定义自己的拷贝构造函数,使之不但拷贝成员,也拷贝资源。也就是说,如果你的类需要析构函数来析构资源,则它也需要一个拷贝构造函数。这种情况下,对对象进行的是深拷贝。
    默认拷贝构造函数对对象进行的是浅拷贝。

  • 相关阅读:
    LeetCode 101. 对称二叉树
    PTA 两个有序序列的中位数(25分)
    CF1567
    亚线性筛
    LowbitMatrix(线段树)
    Matrix(组合数学)
    [模版] 数论基础模版
    Gym102001
    Gym102483A
    [模版] Miller-Rabin素性测试&Pollard-Rho分解质因数
  • 原文地址:https://www.cnblogs.com/ainima/p/6332008.html
Copyright © 2011-2022 走看看