Code Example for Memory Leakage 8

 <  Free Open Study  >  

Code Example for Memory Leakage #8

 #include <iostream.h>  class Fruit {  double weight;  char* color; protected:  Fruit(double, char*);  Fruit(const Fruit&); public:  //Note the nonpolymorphic destructor   ~Fruit();  // The correct destructor would look like: // virtual ~Fruit();  virtual void print(); }; Fruit::Fruit(double w, char* col) {  weight = w;  color = new char[strlen(col)+1];  strcpy(color, col); } Fruit::Fruit(const Fruit& rhs) {  weight = rhs.weight;  color = new char[strlen(rhs.color)+1];  strcpy(color, rhs.color); } Fruit::~Fruit() {  delete color; } void Fruit::print() {  cout << ''\tFruit weight:'' << weight << ''\n''; cout << ''\tFruitcolor:'' << color << ''\n''; } class Apple : public Fruit {  char* variety; public:  Apple(double, char*, char*);  Apple(const Apple&);  ~Apple();  void print (); }; Apple:: Apple(double w, char* col, char* var) : Fruit(w, col) {  variety = new char[strlen(var)+1];  strcpy(variety, var); } Apple::Apple(const Apple& rhs):Fruit(rhs) {  variety = new char[strlen(rhs.variety)+1];  strcpy(variety, rhs.variety); } Apple::~Apple () {  delete variety; } void Apple::print() {  cout << ''Hi, I'm a'' << variety << ''Apple\n'';  Fruit::print(); } class Banana : public Fruit {  char* export; public:  Banana(double, char*);  Banana(const Banana&);  ~Banana(); Banana::Banana(double w, char* exp) : Fruit(w, ''Yellow'') {  export = new char[strlen(exp)+1];  strcpy(export, exp); } Banana:: Banana(const Banana&rhs):Fruit(rhs) {  export = new char[strlen(rhs.export)+1];  strcpy(export, rhs.export); } Banana::~Banana() {  delete export; } void Banana::print() {  cout << ''Hi, I'm a banana from '';  cout << export << ''\n''; } main() {  Fruit *basket[20];  int i, num;  double weight;  char color[128], variety[128], answer[128]; // The following code allows the user to // interactively build a fruit basket of size // 1 through 20.  cout << ''How many fruit in the basket? '';  cin >> num;  if (num < 0  num > 20) num = 10;  for (i=0; i<num; i++) {   cout << ''A)pple or B)anana? '';   cin >> answer;   if (answer [0] == 'a'  answer[0] == 'A' ) {    cout << ''Apple's weight: ''; cin >> weight;    cout << ''Apple's color: ''; cin >> color;    cout << ''Apple's variety: ''; cin >> variety;    basket[i] = new Apple(weight, color, variety);   }   else {    cout << ''Banana's weight: '';    cin >> weight;    cout << ''Banana's country: '';    cin >> variety;    basket[i] = new Banana (weight, variety);   } } for (i=0; i<num; i++) {  basket[i]->print(); } // If Fruit's destructor is not virtual, // then this code will call Fruit's // destructor num times. This will leak // the memory used for the variety string in // each Apple and the export string in each // Banana.  for (i=0; i<num; i++) {   delete basket[i];   }   }  
 <  Free Open Study  >  


Object-Oriented Design Heuristics
Object-Oriented Design Heuristics (paperback)
ISBN: 0321774965
EAN: 2147483647
Year: 1996
Pages: 180

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net