1.
string *s1 = (string*) malloc(10*sizeof(string));
string *s2 = new string[10];
s1指向的是可以容纳10个string对象的足够空间,但内存里没有创建对象,没有办法来初始化数组里的对
象,换句话说,s1一点用都没有。
s2指向的是一个包含10个完全构造好的string对象数组,每个对象可以在任何读取string的操作里安全使
用。
2.
调用free将会释放对象指向的内存,但内存里的string对象不会调用析构函数。如果对象己被分配了内存,那么这些内存将会全部丢失。而调用delete时,数组里的每个对象都会在内存释放前调用析构函数。
3.
为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符.
4.swap, another version
swap(a,b) a=a+b;b=a-b;a=a-b;