|
|
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
makhaonНе понял, при чем здесь FreeAndNil? Ну юзал бы ты Free вместо FreeAndNil стало бы легче? Всё равно бы полез к разрушенной ссылке. Да, стало бы легче, вернее - совсем хорошо. Никакого обращения "к разрушенной ссылке" не было бы. А так - FreeAndNil вначале присвоил ссылке nil, а затем вызвал деструктор, внутри которого происходило обращение к этому объекту по этой ссылке (которая уже nil, а была равна Self). Теперь понятнее стало? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2019, 12:42 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
YuRock, то есть ты в деструкторе как-то умудрился к конкретному экземпляру обратиться, а не к селфу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2019, 16:27 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
makhaonYuRock, то есть ты в деструкторе как-то умудрился к конкретному экземпляру обратиться, а не к селфу?Ну да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2019, 16:29 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
Суть того, что деструктор вызовется неявно при ошибке в конструкторе, это очевидно... Предположим что неявного вызова деструктора нет. Рассмотрим несколько кейсов. Код: pascal 1. 2. Если в строке 1 будет Exception, то строка 2 никогда не выполнится и ресурсы выделенные в конструкторе до ошибки не освободятся Код: pascal 1. 2. 3. 4. 5. Если в конструкторе будет исключение, то присвоение в переменную А не будет выполнено. Следовательно строка в finally не валидная, т.к. А смотрит в никуда... Следовательно ресурсы выделенные в конструкторе до ошибки не освободятся В связи с этим логично, что раз присвоения в А нет, но как-то надо реализовать освобождение ресурсов и в этом блоке кода адреса экземпляра нет, то деструктор вызывается неявно, т.к. компилятор в принципе знает об этом. Поэтому деструкторы надо писать исходя из того, что в конструкторе на любом этапе может вылететь исключение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2019, 18:09 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
YuRockmakhaonYuRock, то есть ты в деструкторе как-то умудрился к конкретному экземпляру обратиться, а не к селфу?Ну да Ну кто тебе тогда виноват? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2019, 21:34 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
X-Citeдеструктор вызовется неявно при ошибке в конструкторе, это очевидно... Код: pascal 1. 2. 3. 4. 5. Это наглядный пример, как в delphi используются "очевидные" вещи. Когда в конструкторе происходит исключение, то A.Free() - вызывается 2(два) раза, сначала неявно, а затем явно. Це "очевидно" для Delphi ? Ась... ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2019, 16:06 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
High.ProgramerЭто наглядный пример, как в delphi используются "очевидные" вещи. Когда в конструкторе происходит исключение, то A.Free() - вызывается 2(два) раза, сначала неявно, а затем явно. Це "очевидно" для Delphi ? Ась... ?Это очевидо подтверждает утверждение, что сдуру можно и член сломать. Вне зависимости от языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2019, 17:51 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
High.ProgramerКогда в конструкторе происходит исключение, то A.Free() - вызывается 2(два) раза, сначала неявно, а затем явно. Це "очевидно" для Delphi ? Ась... ? Неверно.. В finally в A будет лежать мусор, а не экземпляр класса.. Присвоение то не выполнится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2019, 18:12 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
ЕМНИП там нормальный nil будет. Ну потому что конструктор всегда выполняется в неявном try-блоке. Потому что Pascal один из немногих языков, что для людей делался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 14:45 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
BeltarЕМНИП там нормальный nil будет.Там будет мусор из стека. В зависимости от расположения звезд, где-то в 60-80% случаев там окажется nil ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 17:02 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
BeltarЕМНИП там нормальный nil будет. Ну потому что конструктор всегда выполняется в неявном try-блоке. Потому что Pascal один из немногих языков, что для людей делался. Есть два очевидных варианта Код: pascal 1. 2. 3. 4. 5. 6. 7. и Код: pascal 1. 2. 3. 4. 5. 6. или я что-то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 17:49 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 18:10 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
makhaonYuRockпропущено... Ну да Ну кто тебе тогда виноват? Это не важно, кто виноват. Это был просто пример, когда FreeAndNil опаснее o.Free; o := nil. И, да, естественно, обращение к конкретному экземпляру было не между begin end деструктора, а глубоко в недрах, т.ч. не всё так очевидно было и легко, как кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 18:23 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
YuRock, это пример твоего кривого кода. FreeAndNil всего лишь обозначил проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 18:31 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
makhaonYuRock, это пример твоего кривого кода. FreeAndNil всего лишь обозначил проблему.Обозначил, да, и это хорошо, я ж не спорю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 18:37 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)roschinspb, внимательно прочитай 21854330 , это доказательство "от противного" спс, ясно... Эх блин это если до сих пор с Create, Destroy, Free, FreeAndNil холивары идут, это ж какой разрыв шаблона будет если задуматься о DisposeOf, [weak] и AUTOREFCOUNT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 18:41 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
Artem.1stНа форуме встретил эту фразу: “Если в конструкторе произойдет исключение, то неявно вызовется деструктор” Ссыль на тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 18:43 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
roschinspb, arc оказался настолько хорош, что от него решили в линуксе отказаться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 19:01 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
roschinspbkealon(Ruslan)roschinspb, внимательно прочитай 21854330 , это доказательство "от противного" спс, ясно... Эх блин это если до сих пор с Create, Destroy, Free, FreeAndNil холивары идут, это ж какой разрыв шаблона будет если задуматься о DisposeOf, [weak] и AUTOREFCOUNT в этом виноват Borland (не местный модератор, а компания), они не описали чётко стандарт языка, который придумали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2019, 19:38 |
|
||
|
Если в конструкторе произойдет исключение, то вызывается деструктор?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)roschinspbпропущено... спс, ясно... Эх блин это если до сих пор с Create, Destroy, Free, FreeAndNil холивары идут, это ж какой разрыв шаблона будет если задуматься о DisposeOf, [weak] и AUTOREFCOUNT в этом виноват Borland (не местный модератор, а компания), они не описали чётко стандарт языка, который придумали А надо было отлить в граните и поставить в музей? :o) Любое развитие — это отклонение от стандарта. Вообще говоря, во времена борланд развитие было довольно логичным и адекватным, потом начался разброд и шатание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 10:57 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39797193&tid=2039592]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 512ms |

| 0 / 0 |
