- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
#include <iostream>
using namespace std;
class MyException
{
public:
MyException(char *msg) { m_msg = msg; }
~MyException(){}
char *GetError(){return m_msg;}
protected:
char *m_msg;
};
int main()
{
int *buffer;
try
{
buffer = new int[255];
if (buffer == NULL)
{
MyException *exception =
new MyException("Memory allocation failed!");
throw exception;
}
else
delete buffer;
}
catch (MyException *exception)
{
char *msg = exception->GetError();
cout << msg << endl;
}
return 0;
}
Книга "Использование Viusal C++" Кейт Грегори. Глава 24 о предотвращении утечек памяти и работе с исключениями.
Код-то никто не трогает при переводе...
Грубо говоря,
Автор: "Это правильный код с точки зрения индуса"
Переводчик: "Это правильный код"
Пораскинуть мозгом слабо? Или технич. литература сплошь состоит из сырцов, блядь?
ЗЫ Можно было и без матов написать или тяжело мозгом пораскинуть ? Сразу почему-то кажется, что общаюсь с быдлом каким-то честное слово... Без обид.
это условие if (buffer == NULL) никогда не выполнится.
так new бросит исключение bad_alloc.
2)Да ещё это какой-то пример в вакууме:
else
delete buffer;
Сразу удаляем, есл и все получилось.
3)MyException *exception =
new MyException("Memory allocation failed!");
Эта память никогда не освободится.
4)Более того выделять память для исключения, после предыдущей неудачи в работе с памятью - Излишне самоуверенно.
5)cout << msg << endl;
Кто сказал, что в другой версии компилятора для этой операции не выделяется память?
Хотя судя по коду, автор не уверен, что в его компиляторе не выделяется память для этой операции. )))))))
Да и код в книжке приводился как неправильный.