you need to declare the copy constructor, since you are returning the object in the overloaded + operator, the compiler automatically generates it for you if you do not explicitly define it, but the compiler is stupid enough not to make a deep copy on pointers.
To summarize your error in the submitted code:
1.) -/- ( / )
, .
, , , :
Dog::Dog(const Dog& ref) :
_name( strdup(ref._name) ),
_gender( strdup(ref._gender) ),
_age( ref._age )
{
}
Dog& Dog::operator=(const Dog &dObj)
{
if (this != &dObj)
{
free (_name);
free (_gender);
_name = strdup( dObj._name );
_gender = strdup( dObj._gender );
_age = dObj._age;
}
return *this;
}
2.) ( )
.
1 char , , . , , :
Dog::Dog(const char * name, const char * gender, int age) :
_name( strdup(name) ),
_gender( strdup(gender) ),
_age( age )
{
}
3.) / ( )
new [] [], .
, , , strdup ( malloc), :
Dog::~Dog()
{
free (_name);
free (_gender);
_age = 0;
}