c++ 杂记
如果必须分开定义指针和其所指向的对象,则将指针初始化为0.因为编译器可检测出0值的指针,程序可以判断该指针并未指向一个对象。
c++提供了一种特殊的指针类型void*,它可以保存任何类型对象的地址
c++保证:删除0值的指针是安全的。删除指针后,该指针变成悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不存在了。一旦删除了指针所指向的对象,立即将指针设置为0,这样就非常清除的表面指针不再指向任何对象。
指向const对象的指针:cosnt double *cptr;
const指针:int *const curErr = &errNumb;
指向const对象的const指针 const double *const pi_ptr = π
typedef string *pstring;
const pstring cstr;这里const修饰的是pstring的类型,这是一个指针。因此该声明语句应该是把cstr定义为指向string类型的const指针。
*iter++等效于*(iter++)
如果不提供显式初始化,动态创建的对象与在函数内定义的变量初始化方式相同。对于类类型对象,用该类的默认函数初始化;而内置类型的对象则无初始化。
理论上,回收数组时缺少空方括号对,至少会导致运行时少释放了内存空间,从而产生内存泄漏,对于某些系统或元素类型,有时可能会带来更严重的运行时错误。
程序员想通过在类型名后面使用一对内容为空的圆括号对动态创建的对象做初始化。内容为空的圆括号表示虽然要做初始化,但实际上并未提供特定的初值。对于提供了默认构造函数的类类型如string,没必要对其进行初始化:无论程序是明确地不初始化还是要求进行初始化,都会自动调用其默认构造函数初始化该对象。而对于内置类型或没有定义默认构造函数的类型,采用不同初始化方式则有显著的差别。
使用预处理器进行调试:程序所包含的调试代码仅在开发过程中执行。当应用程序已经完成,并且准备提交时,就会将调试代码关闭。