建议:只有在必要时才使用后置操作符。
前置操作需要做的工作更少,只需要加1后返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。
逗号操作符:表达式从左向右计算。逗号表达式的结果是其最右边表达式的值。
new表达式返回指向新创建对象的指针,我们通过该指针来访问对象。
double *pd=new double(33);
delete pd;
创建动态对象时,(几乎)总是对它做初始化也是一个好办法。
int *pi=new int;//该处没有初始化。
int *pi=new int();//会调用默认初始化函数,该处被初始化为0。
const int *pci=new const int(1024);
const string *pcs=new const string;//隐式初始化,调用默认构造函数。
1、删除指向动态分配内存的指针失败(内存泄漏)。
2、读写已删除的对象。删除指针后,将指针置0。
3、对同一个内存空间使用两次delete表达式。
前置操作需要做的工作更少,只需要加1后返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。
逗号操作符:表达式从左向右计算。逗号表达式的结果是其最右边表达式的值。
new表达式返回指向新创建对象的指针,我们通过该指针来访问对象。
double *pd=new double(33);
delete pd;
创建动态对象时,(几乎)总是对它做初始化也是一个好办法。
int *pi=new int;//该处没有初始化。
int *pi=new int();//会调用默认初始化函数,该处被初始化为0。
const int *pci=new const int(1024);
delete pci;
const string *pcs=new const string;//隐式初始化,调用默认构造函数。
内置类型对象或未提供默认构造函数的类类型对象必须显式初始化。
1、删除指向动态分配内存的指针失败(内存泄漏)。
2、读写已删除的对象。删除指针后,将指针置0。
3、对同一个内存空间使用两次delete表达式。