169 похожих чатов

while (1) { my $a =

{};
$a->{func} = sub {
$a->{cnt}++;
};
}

Тут есть утечка - почему и как поправить?

24 ответов

24 просмотра

Циклическая ссылка?

Warstone- Автор вопроса
Alex S
Циклическая ссылка?

Да и как это разорвать так, чтобы не потерять работоспособность кода.

Warstone- Автор вопроса
Ivan
Weak ref )

На что?

Warstone
На что?

Часть ссылок не должна считать дочерние ссылки

Warstone- Автор вопроса
Alex S
Передать cnt, все скаляры указатели

Так неудобно-же. Прдставь что счетчиков 100500

Warstone
Так неудобно-же. Прдставь что счетчиков 100500

Об этом заботится интерпретатор.

Warstone- Автор вопроса
Ivan
Об этом заботится интерпретатор.

Нет. Тут должен заботиться ты.

Warstone
Нет. Тут должен заботиться ты.

Ээээ, слюшай, я языком с динамическим выделением памяти вашпе нэ для это занималса

Warstone- Автор вопроса
Warstone
эээ а как перл следит за памятью?

Да зачэм это? Как хочет, таа и следит. )

Warstone
Так неудобно-же. Прдставь что счетчиков 100500

Сорри, а это вообще идиоматично присваивать замыкание члену словаря? Прост я в питоне ни разу не встречал, чтобы замыкание (кроме декораторов, но там тоже проблем на практике не возникает) становилось методом обьекта Точнее вопрос, проблема с утечкой в замыканиях, это проблема перла, или в других языках так же

Warstone- Автор вопроса
Alex S
Сорри, а это вообще идиоматично присваивать замыка...

Так в том и соль чтобы замкнуть весь словарь (хотя тут объект). Проблема в том что замыкание кладется в сам объект и возникает циклическая ссылка

Alex S
Сорри, а это вообще идиоматично присваивать замыка...

В нормальных языках это асан найдет и отстрелит

Sergei Zhmylove
В нормальных языках это асан найдет и отстрелит

Кхм, а если что, это так-то прототип ООП.

Warstone
На что?

weaken $a->{func} так норм?

Warstone- Автор вопроса
Warstone
Нет

почему?

use Scalar::Util "weaken"; while (1) { my $a = {}; $a->{func} = sub { $a->{cnt}++; }; weaken $a; } а тут какие минусы ?

Warstone- Автор вопроса
Alexey V
use Scalar::Util "weaken"; while (1) { my $a =...

Запусти. Утечка останется

Alexey V
use Scalar::Util "weaken"; while (1) { my $a =...

Лол, тебе не понятно что ли?

Alexey V
use Scalar::Util "weaken"; while (1) { my $a =...

Ты попробуй вызвать func :) и потом для наглядности посмотри, что будет в $a

Похожие вопросы

Обсуждают сегодня

лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
Яндекс маршрутизатор кто-нибудь использовал с своих проектах, чтоб через него маршруты составить/посчитать? Насколько простой/муторный сервис?
Dreamer_0x01 VeseloV
7
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Дебил? Я ищу друга
Bitard 228
27
Карта сайта