Answers/Solutions to Exercises in Chapter 8, Exercise 3
E3: What is wrong with the following class and what kind of problems it may cause during the execution?
class A { public: A() { string = 0; } A(char* x) { string = new char[strlen(x)+1]; strcpy(string,x); } ~A() { if (string) free(string); } A& operator= (const A& a) { string = new char[strlen(a.string)+1]; strcpy(string,a.string); return *this; }};
A3: A recipe for memory leakage! The old string inside a is not deallocated! Every time we have an assuagement in the program: A& a, b; .... a = b; the dynamic string inside a is "forgotten" and a new copy of the string inside b is created.
class A { public: A() { string = 0; } A(char* x) { string = new char[strlen(x)+1]; strcpy(string,x); } ~A() { if (string) free(string); } A& operator= (const A& a) { if (string) delete[] string; // correction string = new char[strlen(a.string)+1]; strcpy(string,a.string); return *this; }
};
Back to Answers/Solutions Index Back to Answers/Solutions for Chapter 8 Index