C++primer阅读笔记---------特殊工具与技术
来源:互联网 发布:数控圆弧编程举例 编辑:程序博客网 时间:2024/06/05 07:15
该博客用于记录自己在阅读过程中不懂的知识点,很少用到但比较重要的知识点以及模棱两可的知识点
声明了noexcept,但函数体中又定义了throw抛出异常,在大多数编译器下,这种操作会顺利通过,但遇到这种情况编译器会在异常抛出后立即调用terminate以保证不违反noexcept的承诺
标准库分别定义了四个operator new和operator delete的重载版本,用户可以在全局和类中自定义,当自定义的版本在类中的时侯new和delete必须是静态的(隐式静态),且不能操作类的任何数据成语
void *operator new(size_t, void*); //不允许用户重新定义这个版本
我们无法自定义new和delete的行为,我们使用new总是先调用operator new来申请空间,再在此空间构造对象,使用delete是先摧毁对象再调用operator delete来释放空间,在这里使用operator定义的函数并不和是重载运算符一样重载了new和delete的行为含义,而是改变了他们对内存的管理方式
对于operator类申请的空间我们不能使用construct函数来构造对象(allocator)
定位new 允许我们再一个已经分配的内存地址上构造对象
a.A::A();//显示调用构造函数,写成a.A()会报错。
a.~A();//显示调用析构函数,但是此时对象a并没有销毁。
显式调用构造函数和析构函数就想调用一般的函数一样,并不意味着创建或销毁对象。但是注意,如果构造函数中动态分配了空间,则显式调用构造函数会出现内存泄露;如果析构函数中释放动态分配的空间,则会出现多次释放同一内存,会出现严重错误。
系统隐式调用析构函数的时候,会加入释放栈内存的动作(而堆内存则由用户手工的释放)
用户显式调用析构函数的时候,只是单纯执行析构函数内的语句,不会释放栈内存,摧毁对象
运行时类型时别的功能由两个运算符实现(有风险)
typeid 返回表达式类型
dynamic_cast 将基类指针或引用安全的转换为派生类的指针或引用
限定作用域的枚举类型赋值时应加上作用域限定符
enum class A{a, aa, aaa}; //限定,成员不会隐式的转换为int
enum A{a, aa, aaa}; //不限定,成员会隐式的转换为int
类的静态成员不属于任何对象,所以静态成员的指针与普通指针没有什么区别,所以成员指针指向类的非静态成员
string myclass:: *p 指向myclass类的string类型的成员
myclass test;
auto s = test.*p;
指向成员函数的指针
string (myclass::*p)(int, int) const; p指向myclass中含有两个形参返回值为string的常量成员函数(只能读取而不能修改其所属对象的数据成员。)
(test.*p)(0, 0);
将成员函数用作可调用对象
嵌套类是一个独立的类,访问方面与普通类基本相同,区别是嵌套类的作用域只在外层类中
union可以有多个数据成员,但每个时刻只有一个数据成员可以有值,当我们赋值给其中一个数据成员后,其余的都被隐藏,union中不能含有引用类型,union也可以为其成员指定public等保护标记,成员可以是类类型,但它必须含有构造函数与析构函数,union不能继承和被继承,所以不能含有虚函数
匿名union不能定义成员函数和保护标记,直接访问其成员
将union的值改为成员中某个类类型的值的时候(或者相反),会调用类类型对应的构造函数(析构函数),如果类类型没有自定义默认构造函数和拷贝控制成员等,编译器将合成相应的函数并定义为删除的
可以使用类来管理简化union的构造销毁等操作,我们可以定义一个枚举类型来跟踪union成员的状态
局部类是定义在函数内部的类,一般很简单,不允许有静态成员,局部类只能使用外层作用域定义的类型名,静态变量,枚举成员
不可移植特性:
算术类型再不同机器上不一样
位域(位域类型必须是整型或枚举)
volatile(程序的值程序控制或检测之外被改变,应声明为volatile,如系统时钟控制更新)
链接指示(C++有时需要其他语言编写的函数)
阅读全文
1 0
- C++primer阅读笔记---------特殊工具与技术
- c++primer要点-特殊工具与技术
- C++primer第五版笔记-第十九章特殊工具与技术
- C++Primer学习笔记103 特殊工具与技术 类成员指针
- 《C++Primer》 第18章:特殊工具与技术
- C++primer薄片系列之特殊工具与技术
- .C++ primer第二次阅读学习笔记(第18章:特殊工具与技术:优化内存分配)
- C++ primer第二次阅读学习笔记(第18章:特殊工具与技术:运行时类型识别、extern。。。)
- 【C++ Primer】特殊工具与技术
- c++Primer,十七,十八,用于大型程序的工具,特殊工具与技术
- [C/C++] 第18章:特殊工具与技术《 C++ Primer 》
- 《C++primer(第五版)》学习之路-第十九章:特殊工具与技术
- C++ Primer 学习笔记_99_特殊工具与技术 --优化内存分配[续1]
- C++ Primer 学习笔记_98_特殊工具与技术 --优化内存分配
- C++ Primer 学习笔记_100_特殊工具与技术 优化内存分配[续2]
- C++ Primer 学习笔记_102_特殊工具与技术 --运行时类型识别[续]
- C++ Primer 学习笔记_104_特殊工具与技术 --嵌套类
- C++ Primer 学习笔记_105_特殊工具与技术 --联合:节省空间的类
- nginx负载均衡初探
- Android进程线程调度nice等优先级讨论
- POJ 3414
- 重命名表名和列名sql语句
- 轻量级框架SSH应用与开发——Struts2之学习总结(进阶)
- C++primer阅读笔记---------特殊工具与技术
- UVA 679
- IAT和导入表关系
- 一个rootkit程序--隐藏文件和进程
- 剑指offer——32.把数组排成最小的数
- 暑期集训之感
- 51Nod-1174-区间中最大的数
- Json数组转Gson
- UVA 122