- 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 о предотвращении утечек памяти и работе с исключениями.
system-adm 20.02.2010 18:08 # −1
guest 20.02.2010 21:29 # 0
ccoder 21.02.2010 10:33 # 0
Pencioner 23.02.2010 15:42 # +2.2
Bjarne_Stroustrup 08.06.2010 11:40 # −2
ccoder 08.06.2010 12:26 # +1
Код-то никто не трогает при переводе...
Bjarne_Stroustrup 08.06.2010 15:16 # 0
Грубо говоря,
Автор: "Это правильный код с точки зрения индуса"
Переводчик: "Это правильный код"
Пораскинуть мозгом слабо? Или технич. литература сплошь состоит из сырцов, блядь?
ccoder 08.06.2010 19:04 # 0
ЗЫ Можно было и без матов написать или тяжело мозгом пораскинуть ? Сразу почему-то кажется, что общаюсь с быдлом каким-то честное слово... Без обид.
guest 21.02.2010 00:10 # +3
это условие if (buffer == NULL) никогда не выполнится.
так new бросит исключение bad_alloc.
2)Да ещё это какой-то пример в вакууме:
else
delete buffer;
Сразу удаляем, есл и все получилось.
3)MyException *exception =
new MyException("Memory allocation failed!");
Эта память никогда не освободится.
4)Более того выделять память для исключения, после предыдущей неудачи в работе с памятью - Излишне самоуверенно.
5)cout << msg << endl;
Кто сказал, что в другой версии компилятора для этой операции не выделяется память?
Хотя судя по коду, автор не уверен, что в его компиляторе не выделяется память для этой операции. )))))))
guest 02.03.2010 10:50 # 0
Да и код в книжке приводился как неправильный.
ccoder 05.03.2010 12:15 # 0
absolut 08.05.2010 21:42 # 0
ISith 21.02.2010 13:27 # 0
guest 21.02.2010 19:36 # +10.2