Interview_C++_day5

动态内存分配

在执行程序过程中动态分配或回收存储空间的分配内存的方法。
C语言 一般使用 \(malloc、free\)C++ 一般使用 \(new、delete\)

  1. \(malloc\) 原型为 void *malloc(unsigned int size),开辟一块长度为 \(size\) 连续内存空间,返回 \(void\) 类型指针。失败返回 \(NULL\)
  2. \(free\) 原型为 void free (void* ptr),释放动态分配的内存,\(malloc\)\(free\) 要配套使用。
  3. \(new\) 返回分配内存单元的起始地址,需要存放在一个指针变量中。失败抛出异常 bad_alloc
  4. \(delete\) 也是用来释放动态分配的内存,分为两种使用 delete <指针变量>delete[] <数组名>\(new\)\(delete\) 要配套使用。
int *p = (int*)malloc(sizeof(int)*100);
free(p);
int *a = new int;
delete a;
int *q = new int[100];
delete[] q;

malloc/free 和 new/delete

  1. malloc/free 是标准的库函数,new/delete 是运算符。
  2. malloc 从堆上分配内存,new 从自由存储区分配内存。
  3. malloc 需要显式指出分配的内存大小,而 new 不必,编译器会自行计算。
  4. new/delete 会调用构造函数和析构函数,malloc/free 不会.
  5. malloc 失败返回 \(NULL\)new 失败抛出异常 bad_alloc
  6. malloc 返回无类型指针,new 返回有类型指针。
  7. new 的实现可以基于 malloc,而 malloc 不可调用 new
  8. new/delete 可以被重载,malloc/free 不能。

new/delete 和 new[]/delete[]

  1. new/delete 是对分配/回收单个对象指针的处理。
  2. new[]/delete[] 是对分配/回收对象数组指针的处理。
  3. new[] 开辟的数组空间会多 4 字节来存放数组大小

C++ 类的访问权限

  1. \(public:\) 公有的,可以被任意对象访问。
  2. \(protected:\) 受保护的,只允许本类和子类的成员函数访问。
  3. \(private:\) 私有的,只允许本类的成员函数访问。

struct 和 class 区别

  1. \(struct\) 成员、继承方式默认都是 \(public\) 的,\(class\) 默认的方式是 \(private\) 的。
  2. \(struct\) 不可用于声明模板类,而 \(class\) 可以。
template<class T>   // 存在
template<struct T>  // 不存在

C++类内定义引用数据成员

  1. 不能使用默认的构造函数,必须提供构造函数。
  2. 必须在初始化列表中初始化,不能再构造函数内初始化。
  3. 构造函数的形参也必须是引用类型。

构造函数分为初始化和计算两个阶段,第一阶段对应初始化列表,第二阶段对应函数主体,引用必须在第一阶段完成。

#include <iostream>
using namespace std;

class Node {
public:
    int& a;
    int b, c, d;
    Node(int &x, int y, int z, int k) : a(x), b(y), c(z), d(k) {
    }
};

int main() {
    int t = 1;
    Node x(t, 2, 3, 4), y(t, 2, 3, 4);
    x.a++;
    cout << y.a << endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Jiaaaaaaaqi/p/12296234.html