Dynamic memory allocation and exception safety
Imagine that you have to write a program to rotate images. Your program takes the name of the file and the angle of rotation as input, reads the contents of the file, performs the processing, and returns the output. Here is some sample code.
1 #include <istream> 2 #include <fstream> 3 typedef unsigned char byte; 4 5 byte *rotateImage(std::string imgFile, double angle, 6 size_t& sz) { 7 // open the file for reading 8 std::ifstream imgStrm(imgFile.c_str(), std::ios::binary); 9 10 if (imgStrm) { 11 // determine file size 12 imgStrm.seekg(0, std::ios::end); 13 sz = imgStrm.tellg(); 14 imsStrm.seekg(0); // seek back to start of stream 15 16 byte *img = new byte[sz]; // allocate buffer and read 17 // read the image contents 18 imgStrm.read(reinterpret_cast<char*>(img), sz); 19 // process it 20 byte *rotated = img_rotate(img, sz, angle); 21 //...