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

Absinthe

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

hell0w0rd

Продвинутый новичок
Lionishy, за тебя никто не решит, пока программа не умрет, нужны ли тебе объекты, под которые выделена память, или нет. Или по твоему откуда утечки памяти берутся?)
 

Lionishy

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

откуда утечки памяти берутся?
Утечки памяти и висячие адреса возникают при работе с указателями, а не с объектами.
 

fixxxer

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

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

UPD. А, вы тут C++ обсуждаете. Ну-ну ;) Какие-то смартпоинтеры зачем-то придумали, зачем? Все же так просто.
 

hell0w0rd

Продвинутый новичок
Lionishy, че-то ты тугой.
до освобождения памяти выбрасываем исключение и тут же его ловим. и как она тут автоматом освободится?
Код:
int *a = new int;
try {
    throw "hello";
    delete a;
} catch (...) {}
 

TLENS

Новичок
Код:
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"
 

AnrDaemon

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


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