当前位置:   article > 正文

cpp基础学习笔记02

cpp基础学习笔记02

include "" 和 <>

"" 一般代表用户提供的头文件,查找时从当前文件目录开始寻找。(windows是当前路径下找,linux有些区别)

    <> 标准工程文件,会检查预定义宏,通过设置的搜索路径环境变量修改路径。

const 关键字

  1. int a = 1;
  2. int b = 2;
  3. int c = 3;
  4. // 读法,谁在前,先读谁
  5. int const *p1 = &b; // 常量指针
  6. int *const p2 = &c; // 指针常量
  7. p1 = &a; // 允许
  8. *p1 = a; // 错误
  9. p2 = &a; // 错误
  10. *p2 = a; // 允许

p1先和*结合,是指针,然后被const修饰*p1,所以指向的值不可以改变。

p2先和const结合,const修饰p2指针。

C++内存泄露

没有释放掉不再使用的内存,失去对该段内存控制,造成内存浪费。

1. 堆内存泄露(new malloc后,没有delete或者free掉)

2. 系统资源内存泄露

3. 基类的析构函数没有定义为虚函数

4. 释放数组时,使用了delete而不是delete[]

如何判断内存泄露

1. linux下,使用valgrind工具

2. 统计new delete次数

智能指针是否会内存泄露

举例:智能指针互相指向,类似死锁

typeid

获取参数类型信息,用法:

  1. std::cout << typeid(int).name() << std::endl;
  2. // 判断是不是某种类型
  3. if(typeid(1.1) == typeid(float))
  4. {}

构造函数是否可以抛出异常?

应该尽量避免构造函数抛出异常,否则析构函数不会执行,可能导致内存泄露。

析构函数是否可以抛出异常?

不可以,可能导致内存泄露。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号