有关char * str = new char [ 3 ] 于atoi的一些有关问题 ,请高手帮忙解释一下

有关char * str new char [ 3 ] 于atoi的一些问题 ,请高手帮忙解释一下Time::Time ( char * string ){ c

有关char * str = new char [ 3 ] 于atoi的一些问题 ,请高手帮忙解释一下
Time::Time ( char * string )
{ char * str = new char [ 3 ] ;
str[0] = string[0];
str[1] = string[1];
str[2] = '\0';
hh = atoi(str);
str[0] = string[3];
str[1] = string[4];
str[2] = '\0';
mm = atoi(str);
str[0] = string[6];
str[1] = string[7];
str[2] = '\0';
ss = atoi(str);
delete str ;
}

这是书上的一个例题,有个time类,函数的功能就是输入"hh:mm:ss"字符串的时候,这个函数可以将类里面的私有变量hh,mm,ss初始化为"hh:mm:ss"字符串里面的值;


 但我有几点不懂的,第一个就是char * str = new char [ 3 ],这句,我没学过new的用法,new char[3]也不懂什么意思,请高手麻烦解释一下

还有*str是一个字符指针,可以像用字符数组那样str[0],str[1]这样来使用的?

还有最后的delete *str又是什么意思? 就是删除刚才创建的*str么? 这样的话用析构函数能不能代替这句话?

问题有点多,烦请各位前辈耐心指教一下...谢谢!

[解决办法]
delete str;不是delete *str;new——delete是一对动态开辟内存和回收内存的功能函数;最好再加一句str=NULL;*str是一个字符指针,在此是一个指向字符数组的指针。
[解决办法]
char * str = new char [ 3 ] 的意思是向系统请求分配3个char的连续内存空间;
str是字符指针,可以使用str[0], str[1],它的意思相当于*(str+0)和*(str+1),取相应指针所指类型的便宜地址上的值;
首先,delete str本来有错,应该为delete []str。应为前面使用的是new char[3],开辟的是连续的3个char空间,必须使用[]将所有内存释放,而是用delete str,只会释放str所指向的那一个char内存。另外,类的析构函数只会释放成员变量的空间,不能够释放用户自己new的空间。在编程序一般的原则就是谁申请的内存用后由谁销毁。