|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Victor Wagner 2:5020/400 31 Jan 2003 17:07:41 To : Eugene Karpachov Subject : Re: 386SX and RedHat_8.0 -------------------------------------------------------------------------------- Eugene Karpachov <jk@steel.orel.ru> wrote: EK> Fri, 31 Jan 2003 12:00:15 +0000 (UTC) Victor Wagner написал: >> >> AC> Вообще-то try/catch вставить не так уж и сложно. >> >> Раз вставил, два вставил, и на сотый раз код теряет остатки читаемости. >> >> А если забыл? Memory leak обеспечен. EK> Это утверждение может быть подтверждено примером? Мне почему-то кажется, EK> что нет. int SomeClass::SomeMethod { SomeOtherClass* foo = new SomeOtherClass(); // Вот тут-то оно exception и кинет int result=foo->SomeMethod(); delete foo; return result; } Вопрос - кто в данном случае освободит динамическую память, в которой размещен объект foo? Данным называется случай, когда foo->SomeMethod выкинул exception. Этот случай, естественно, чрезмерно упрощенный. Достаточно сделать объект foo статическим и мусора не будет. Hо бывают и более сложные случаи. Hапример, если SomeOtherClass - pure abstract class, которому присваеивается объект одного из десятка производных классов. Теперь то же самое на языке с garbage collection sub SomeMethod { return SomeOtherClass->new()->SomeMethod(); } -- http://www.communiware.ru http://www.ice.ru/~vitus --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/15178587b49b4.html, оценка из 5, голосов 10
|