对象(深入C++对象模型)
2016-05-26 20:07
323 查看
Matrix identity //Matrix 是一个类 main() { //identity必须放在此处初始化 Matrix m1= identify; ... return 0; }
C++ 保证,一定会在main函数中第一次用到identity之前,把identity构造出来,而在main函数结束之前把identity结束掉,像identity这样所谓的全局对象,如果有构造函数和析构函数,它需要静态的初始化操作和内存释放操作。
C++程序中所有的数据部分都被放置在程序的数据部分中,如果显式指定给一个值,此对象将以该值为初值,否则object所配置的内容都为0。
int v1 = 1024; int v2;
v1和v2都配置于程序的数据区,v1值为1024,v2值为0(这和C有不同,C并不自动设定初值)。
局部静态对象
const Matrix& identify() { static Matrix mat_identify; //... return mat_identify; }
mat_identify的构造必须只能运行一次,虽然上述函数可能会被调用多次
mat_identity的析构必须只能运行一次,虽然上述函数可能会被调用多次
new 和 delete
new 运算符实际上总是以标准的Cmalloc()完成,虽然并没有规定一定得这么做不可,相同情况,delete运算符也是以标准的C
free()完成的。
临时性对象
如果我们有一个函数T operator+ (const T &,const T &)
以及两个对象,a和b,那么:
a+b;
可能会导致一个临时性对象,以放置传回的对象。是否导致一个临时性对象,视编译器的进取性以及上述操作发生时的程序语境而定。
T a,b; T c = a+b;
编译器会产生一个临时性对象,放置
a+b的结果,然后再利用T的拷贝构造函数,把该临时性对象当做c的初始值。然而比较更可能的转换就是直接以拷贝构造的方式,将
a+b的值放在c中,于是不需要临时性对象,以及对其构造和析构的调用。此外,视
operator+()的定义而定,named return value (NRV)优化,这将导致直接在上述c对象中求表达式结果,避免拷贝构造和具体对象的析构
相关文章推荐
- 【运算符重载-数组类运算的实现】
- 【运算符重载-数组类运算的实现】
- 【运算符重载-数组类运算的实现】
- 【运算符重载-数组类运算的实现】
- 【运算符重载-数组类运算的实现】
- c++作业6
- 将序列按照想要的排序,去重
- c++矩阵的转置和快速转置
- c++实验6——项目3——矩阵求和
- C++ IO流输出格式的控制
- c++稀疏矩阵的压缩存储
- 设计模式之原型模式(C++实现)
- c++对称矩阵的压缩存储
- C++设计模式浅识原型模式
- HDU 1171.Big Event in HDU【01背包】【5月26】
- 【C++ 基础】c++中冒号(:)和双冒号(::)的用法
- c++ 拷贝构造函数
- C++走向远洋——55(项目一3、分数类的重载、>><<的重载)
- C语言存储空间管理和链表杂记
- C++走向远洋——54(项目一2、分数类的重载、取倒数)