I recently compiled a string class (not my class, I must add, the one from SAMS 21 days)
I won't regurgitate the whole thing here, as my question is only specific to a certain section of the code, I'll try to give all that's needed.
Firstly, it has the private member variables
Code:
unsigned short len
char* itsString
String( unsigned short )
it has one overloaded assignment operator, which is as follows ( I've only written the definition here )
Code:
String& String::operator =(const String & rhs)
{
if( this == &rhs )
return *this;
delete[] itsString;
len = rhs.getLength();
for( unsigned short i = 0; i<len; i++ )
itsString[i] = rhs[i];
itsString[len] = '\0';
return *this;
}
So far so good. Then in the main function it does this.
Code:
char* temp = "Hello World";
s1 = temp //s1 has already been declared as a string
Now unless I'm mistaken, the argument for the assignment operator being used in this case is a C-string literal, and not a "String" as expected by our overloaded assignment operator. So here the compiler will make it's own assignment operator correct? Either way it compiles but when I run the program the debugger pops up and tells me there is a problem, and points to the destructor, which looks like this
Code:
String::~String()
{
delete [] itsString;
len = 0;
}
For convenience, here's the message which pops up, not that it's terribly interesting.
http://www.stonehambey.com/debugString.jpg
My initial thought was that the compiler generated assignment operator for C style strings didn't assign the private member variables properly and that is why there was a problem when the destructor on it is called when the program closes.
I tried writing my own additional assignment operator, which looked something like this
Code:
String& String::operator =(const char * rhs)
{
if( itsString == rhs )
return *this;
delete[] itsString;
len = strlen( rhs ) + 1;
for( unsigned short i = 0; i<len; i++ )
itsString[i] = rhs[i];
itsString[len] = '\0';
return *this;
}
But I'm still getting problems when debugging the program (of course it could be I haven't written the second assignment operator correctly ;) )
I'm pretty sure it's got something to do with that part of the main program, since when I comment it out it works fine, but I'm just not sure what.
Any advice or help would be greatly appreciated :)
Regards,
Stonehambey