I'd use rather...
If you are building a String Class, in the uninitialized constructor, i.e....
Code:
String::String ()
19 {
20 len=0;
21 string=new char [len+1];
22 string='\0';
23 }
...I'd alter the code to perform a minimal allocation, such as 16 bytes or something like that. Further, I'd add another private member variable for the capacity of the String, which will be one character less than the memory allocation (using the char data type). And in every member function you have to do careful 'book-keeping to maintain correct values for the length and capacity, or else you'll crash and burn.