1.变量声明了系统就会给分配内存。你定义了int* p,系统就分配出这么块地方来存它,不过记住,这块地方只是个存地址形指针的地方,大小为sizeof(int *),跟你以后new得到一个int还是int array,还是什么的没有任何关系。到这里系统是不会管这些的。像这样定义在函数头定义的变量是存在执行程序的堆栈中的。
2.像大部份C语言中的基本变量类型一样,定义完一个指针之后,系统是不负责帮助初始化的(除非是static)。你如果定义了一个float f;那么这个f就是一个无法预知的数字,你必须自己初始化这个f。同样指针int* p定义了之后也应该初始化,否则系统给p随便指一个地方,用到的时候立刻crash。应一上来就写上int *p = NULL,或者int *p = new ....
3.编程序时不给指针初始化是个极坏的习惯。应该杜绝。
4.delete之前判断p是否为空是个正确的操作,虽然没有必要(delete 会替你作的)。
5。当你的函数结束或整个程序结束的时候你需要自己清理内存。在函数中定义的变量存在执行程序的堆栈中,会随着函数的结束自动被系统用destructor清理掉。所有new 出来的是存在heap(不知这词怎么翻译)中的。你需要作与之响应的delete。
6。在C++中可以用smart pointer,查查相关书籍应该能找到,smart pointer会帮你自动管理很多哪存,使你的指针用起来没这么麻烦。