cpp:exception_rethrow

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
cpp:exception_rethrow [2019/05/06 08:41]
gthanos [Παραλλαγή του παραπάνω παραδείγματος]
cpp:exception_rethrow [2019/05/06 08:41]
gthanos [Διαχείριση εξαίρεσης και παραγωγή νέας εξαίρεσης κατά τη διαχείριση της]
Line 17: Line 17:
   int **raster;   int **raster;
 public: public:
-  PPMImage(char *filename) { +  PPMImage(char *filename); 
-    string str; +  ~PPMImage(); 
-    unsigned char red, green, blue; +}; 
-    ifstream in(filename); + 
-    if(!in.is_open()) { +PPMImage::PPMImage(char *filename) { 
-      std::ios_base::failure fex("File not found!"); +  string str; 
-      throw fex; +  unsigned char red, green, blue; 
-    +  ifstream in(filename); 
-    try { +  if(!in.is_open()) { 
-      in >> str; +    std::ios_base::failure fex("File not found!"); 
-      in >> str; +    throw fex; 
-      width = atoi(str.c_str()); +  
-      in >> str; +  try { 
-      height = atoi(str.c_str()); +    in >> str; 
-      in >> str; +    in >> str; 
-      colordepth = atoi(str.c_str()); +    width = atoi(str.c_str()); 
-      raster = new int*[height]; +    in >> str; 
-      for(int row=0; row<height; row++) +    height = atoi(str.c_str()); 
-        raster[row] = new int[width]; +    in >> str; 
-      for(int row=0; row<height; row++) { +    colordepth = atoi(str.c_str()); 
-        for(int col=0; col<width; col++) { +    raster = new int*[height]; 
-          cin >> str; +    for(int row=0; row<height; row++) 
-          red = (unsigned char) atoi(str.c_str()); +      raster[row] = new int[width]; 
-          cin >> str; +    for(int row=0; row<height; row++) { 
-          green = (unsigned char) atoi(str.c_str()); +      for(int col=0; col<width; col++) { 
-          cin >> str; +        cin >> str; 
-          blue = (unsigned char) atoi(str.c_str()); +        red = (unsigned char) atoi(str.c_str()); 
-          raster[row][col] = 0; +        cin >> str; 
-          raster[row][col] = (red << 16) | (green << 8) | blue; +        green = (unsigned char) atoi(str.c_str()); 
-        }+        cin >> str; 
 +        blue = (unsigned char) atoi(str.c_str()); 
 +        raster[row][col] = 0; 
 +        raster[row][col] = (red << 16) | (green << 8) | blue;
       }       }
-    } 
-    catch(std::bad_alloc &ex) { 
-      cerr << "std::bad_alloc occured!\n"; 
-      in.close(); 
-      throw ex; 
     }     }
   }   }
-   +  catch(std::bad_alloc &ex) { 
-  ~PPMImage() { +    cerr << "std::bad_alloc occured!\n"
-    for(int row=0; row<heightrow++) +    in.close()
-      delete raster[row]+    throw ex;
-    delete raster;+
   }   }
 +}
      
-  int **getRaster() { return raster; } +PPMImage::~PPMImage() { 
-   +  if(raster == nullptr) 
-};+    return
 +  for(int row=0; row<height; row++) 
 +    delete raster[row]
 +  delete raster; 
 +  raster = nullptr; 
 +}
  
 int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
Line 72: Line 75:
   }   }
   catch(ios_base::failure &fex) {   catch(ios_base::failure &fex) {
-    cerr << "File '" << argv[0] << "' was not found!\n";+    cerr << "File '" << argv[1] << "' was not found!\n";
   }   }
   catch(bad_alloc &ex) {   catch(bad_alloc &ex) {
     cerr << "Memory allocation failure!\n";     cerr << "Memory allocation failure!\n";
-    if (imgptr!=nullptr) {+    if (imgptr!=nullptr)
       cerr << "imgptr != nullptr\n";       cerr << "imgptr != nullptr\n";
-      if(imgptr->getRaster() != nullptr) { +    else
-        cerr << "imgptr->getRaster() != nullptr\n"; +
-        delete imgptr->getRaster(); +
-      } +
-      else +
-        cerr << "imgptr->getRaster() == nullptr\n"; +
-      } +
-      delete imgptr; +
-    } +
-    else {+
       cerr << "imgptr == nullptr\n";       cerr << "imgptr == nullptr\n";
-    } 
   }   }
   delete imgptr;   delete imgptr;
cpp/exception_rethrow.txt · Last modified: 2020/05/16 19:12 (external edit)