cpp:exception_rethrow
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cpp:exception_rethrow [2019/05/06 08:41] – [Παραλλαγή του παραπάνω παραδείγματος] gthanos | cpp:exception_rethrow [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 17: | Line 17: | ||
int **raster; | int **raster; | ||
public: | public: | ||
- | PPMImage(char *filename) { | + | |
- | string str; | + | ~PPMImage(); |
- | unsigned char red, green, blue; | + | }; |
- | ifstream in(filename); | + | |
- | if(!in.is_open()) { | + | PPMImage::PPMImage(char *filename) { |
- | std:: | + | string str; |
- | throw fex; | + | unsigned char red, green, blue; |
- | } | + | ifstream in(filename); |
- | try { | + | if(!in.is_open()) { |
- | in >> str; | + | std:: |
- | 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 = atoi(str.c_str()); |
- | raster[row] = new int[width]; | + | in >> str; |
- | for(int row=0; row< | + | colordepth = atoi(str.c_str()); |
- | for(int col=0; col< | + | raster = new int*[height]; |
- | | + | for(int row=0; row< |
- | red = (unsigned char) atoi(str.c_str()); | + | raster[row] = new int[width]; |
- | | + | for(int row=0; row< |
- | green = (unsigned char) atoi(str.c_str()); | + | for(int col=0; col< |
- | | + | |
- | blue = (unsigned char) atoi(str.c_str()); | + | red = (unsigned char) atoi(str.c_str()); |
- | raster[row][col] = 0; | + | |
- | raster[row][col] = (red << 16) | (green << 8) | blue; | + | green = (unsigned char) atoi(str.c_str()); |
- | } | + | |
+ | blue = (unsigned char) atoi(str.c_str()); | ||
+ | raster[row][col] = 0; | ||
+ | raster[row][col] = (red << 16) | (green << 8) | blue; | ||
} | } | ||
- | } | ||
- | catch(std:: | ||
- | cerr << " | ||
- | in.close(); | ||
- | throw ex; | ||
} | } | ||
} | } | ||
- | | + | |
- | ~PPMImage() { | + | |
- | | + | |
- | | + | |
- | | + | |
} | } | ||
+ | } | ||
| | ||
- | int **getRaster() { return raster; | + | PPMImage:: |
- | + | if(raster == nullptr) | |
- | }; | + | |
+ | for(int row=0; row< | ||
+ | delete | ||
+ | | ||
+ | | ||
+ | } | ||
int main(int argc, char *argv[]) { | int main(int argc, char *argv[]) { | ||
Line 70: | Line 73: | ||
try{ | try{ | ||
imgptr = new PPMImage(argv[1]); | imgptr = new PPMImage(argv[1]); | ||
+ | delete imgptr; | ||
} | } | ||
catch(ios_base:: | catch(ios_base:: | ||
- | cerr << "File '" | + | cerr << "File '" |
} | } | ||
catch(bad_alloc &ex) { | catch(bad_alloc &ex) { | ||
Line 78: | Line 82: | ||
if (imgptr!=nullptr) { | if (imgptr!=nullptr) { | ||
cerr << " | cerr << " | ||
- | if(imgptr-> | ||
- | cerr << " | ||
- | delete imgptr-> | ||
- | } | ||
- | else { | ||
- | cerr << " | ||
- | } | ||
delete imgptr; | delete imgptr; | ||
} | } | ||
- | else { | + | else |
cerr << " | cerr << " | ||
- | } | ||
} | } | ||
- | delete imgptr; | ||
return 0; | return 0; | ||
} | } | ||
Line 105: | Line 100: | ||
</ | </ | ||
- | Από τον παραπάνω κώδικα μπορούμε να συμπεράνουμε τα εξής: | + | Από τον παραπάνω κώδικα μπορούμε να συμπεράνουμε |
- | - Εφόσον παράγεται ένα // | + | |
- | - Εάν εφαρμόσω τον τελεστή **delete** σε ένα δείκτη που έχει την τιμή **nullptr**, | + | |
===== Παραλλαγή του παραπάνω παραδείγματος ===== | ===== Παραλλαγή του παραπάνω παραδείγματος ===== | ||
cpp/exception_rethrow.1557132063.txt.gz · Last modified: 2019/05/06 07:41 (external edit)