не перехватывает Exception

Всё получается с точностью до наоборот.
Скажем, в С++ можно захватить ресурс инициализацией и освободить в деструкторе (это даже предпочтительно). А в Java/PHP так сделать нельзя.
Сомнительно, что нагружение сборщика мусора отыскиванием автоматических объектов лучше блока finaly.
o_rly_original1.jpg
 
Lionishy, за тебя никто не решит, пока программа не умрет, нужны ли тебе объекты, под которые выделена память, или нет. Или по твоему откуда утечки памяти берутся?)
 
hell0w0rd, объекты гарантированно уничтожаются ровно в тот момент, когда выходят из области видимости.
Это называется автоматической памятью.

откуда утечки памяти берутся?
Утечки памяти и висячие адреса возникают при работе с указателями, а не с объектами.
 
hell0w0rd, объекты гарантированно уничтожаются ровно в тот момент, когда выходят из области видимости.
Это называется автоматической памятью.

Мечты-мечты.

Память, выделенная под объект, гарантированно помечается как свободная, когда refcount = 0.

UPD. А, вы тут C++ обсуждаете. Ну-ну ;) Какие-то смартпоинтеры зачем-то придумали, зачем? Все же так просто.
 
Lionishy, че-то ты тугой.
до освобождения памяти выбрасываем исключение и тут же его ловим. и как она тут автоматом освободится?
Код:
int *a = new int;
try {
    throw "hello";
    delete a;
} catch (...) {}
 
Код:
ErrorException extends Exception {
Конечно будет отлавливать первый подходящий. читай в доке пример #3 http://www.php.net/manual/ru/language.exceptions.php
PHP:
class MyException extends Exception { }

class Test {
    public function testing() {
        try {
            try {
                throw new MyException('foo!');
            } catch (MyException $e) {
                // повторный выброс исключения
                throw $e;
            }
        } catch (Exception $e) {
            var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();
p.s. Решил обновить знания и слазить в мануал, понял что finally до сих пор ни разу не использовал, хотя знаю о нём.


Вопрос в другом. Повторяю. В моем случае все наоборот было отлавливал я ErrorException а выбрасывал Exception и она перехватывалась не тем кетчем что вызвало баг в скрипте.
PHP:
        $r = '';
        try {
            try {
                throw new Exception();
            } catch (ErrorException $ex) {
                $r .= 'ErrorException';
            }
        }
        catch (Exception $ex) {
            $r .= 'Exception';
        }
        var_dump($r); // string(9) "Exception"
 
hell0w0rd, объекты гарантированно уничтожаются ровно в тот момент, когда выходят из области видимости.
Это называется автоматической памятью.


Утечки памяти и висячие адреса возникают при работе с указателями, а не с объектами.
Все объекты в PHP - это (сюрприз!) указатели. Читаем мануал. Потом задаём вопросы.
 
Сверху