@ProCxx

Страница 2361 из 2477
Firstname
19.09.2018
17:32:32
волгринд почему то ругается на функцию insertAll

Alex Фэils?︙
19.09.2018
17:32:32
https://github.com/Worsell/SomeSimpleProjects/tree/SimpleBinaryTree/scr/SimpleTree
бля, сегодня из кодовой базы удолял SimpleTree)

Firstname
19.09.2018
17:32:36
типа там утечка

Alex Фэils?︙
19.09.2018
17:32:51
пожалуйста, не пиши такие короткие сообщения, старайся выразить мысль в одном сообщении

Google
Anton
19.09.2018
17:33:23
типа там утечка
а где delete tmp?

Firstname
19.09.2018
17:33:37
а где delete tmp?
а он нужен?)))

там древо присойденяется к текущему Копирования вроде нет

Max
19.09.2018
17:34:31
типа там утечка
root = nullptr; Зачем это делать?

Anton
19.09.2018
17:34:35
new есть delete надо

если smart pointer-ов нет, но я не вижу чот

Firstname
19.09.2018
17:36:06
если smart pointer-ов нет, но я не вижу чот
хочешь сказать там копия древа создается?

Max
19.09.2018
17:36:15
типа там утечка
если есть — она в insertAll

Anton
19.09.2018
17:36:44
хочешь сказать там копия древа создается?
я не вникал, но перед tmp = nullptr; вызывай delete tmp

Max
19.09.2018
17:37:06
там, где зачем-то создаются куча новых деревьев в цикле, и ни одно из них не удаляется.

Firstname
19.09.2018
17:37:30
Ну смотрите, в insertAll я выделяю память для поддрева это поддрево прицепляю к тому, из которого вызывается insertAll

Max
19.09.2018
17:37:32
создаются через new, причём. Хотя и "переписал на смартпоинтерах".

Simon
19.09.2018
17:37:50
А почему это не в супапро?

Google
Anton
19.09.2018
17:40:06
там по узлам копирование идёт вроде

/dev
19.09.2018
17:40:24
А почему это не в супапро?
У нас сегодня brainpositive day

Anton
19.09.2018
17:40:37
а, нет, не по узлам ))

Dima
19.09.2018
17:40:38
void *$(){[&](...){$:[](){({$:;_:[](){},""[+-(&&$<&&_)];});}();}([=](){});}

Хм

Simon
19.09.2018
17:41:13
У нас сегодня brainpositive day
Тогда вопрос: почему не сделали move-only std::function?

Max
19.09.2018
17:41:23
Firstname
19.09.2018
17:41:25
блин вы можете сказать зачем delete вот у меня есть древо занимающую определенную память Я вызываю функцию insertAll задача которой скоприровать элементы принимаемые по итератору они принимаются отсортированно для этого я создаю "пачками" деревья выделяя память new потом корень древа присойденяю к текущему в нужное место

Firstname
19.09.2018
17:42:55
а как потом delete вызывать для всей этой чехарды?
delete от корня того куда вставляем грохает все древо

Anton
19.09.2018
17:43:11
надо те же адреса передавать, которые возвращал new

/dev
19.09.2018
17:43:23
Тогда вопрос: почему не сделали move-only std::function?
унаследуйся от std::function и от boost::nocopyable

Firstname
19.09.2018
17:43:24
обход в глубину ж

Max
19.09.2018
17:44:10
обход в глубину ж
и где этот delete и этот обход?

Google
Firstname
19.09.2018
17:46:19
и где этот delete и этот обход?
в деструкторе ноды

в общем я разобрался там тупо на самом деле

очень

Max
19.09.2018
17:47:06
и не надо.

Firstname
19.09.2018
17:47:16
Node()

Max
19.09.2018
17:47:48
юзай смартпоинтеры.

в деструкторе ноды
virtual ~Node() { right = nullptr; left = nullptr; }

Firstname
19.09.2018
17:48:39
юзай смартпоинтеры.
посмотри что такое right и left

какой то подозрительный класс

))

Max
19.09.2018
17:50:01
посмотри что такое right и left
и, что дальше? Ты просто написал 2 лишних строчки, вместо virtual ~Node() = default;

а в insertAll ты создаёшь через new кучу деревьев, и потом их не удаляешь.

Firstname
19.09.2018
17:50:40
обнови

гитхаб

я там протупил и забыл что под указатели память тоже выделяется

Firstname
19.09.2018
17:51:59
ну посмотри дифф

Max
19.09.2018
17:52:19
утечек больше нет. Смартпоинтеры - крутые. Q.E.D.

Google
Max
19.09.2018
17:54:13
я там протупил и забыл что под указатели память тоже выделяется
ты там поменял просто raw-указатели на shared. Память под них выделяется так же. Рекомендую unique, а не shared. Шаред может быть накладно.

bool insert(T const element) — используй ссылки.

во всех remove и find, соответственно, тоже.

// Ну тут нет утечек, вне зависимости от того, что показывает анализатор Весьма смелое заявление :)

Firstname
19.09.2018
17:59:25
// Ну тут нет утечек, вне зависимости от того, что показывает анализатор Весьма смелое заявление :)
я думал, что это древо очишается при выходе из функции т.е. дико подводит знание с++(((

Max
19.09.2018
18:00:13
ну да для первых разве не создается копия на каждый юникл?
unique вообще не копируется. Можно только мувать.

Firstname
19.09.2018
18:01:33
unique вообще не копируется. Можно только мувать.
не, копируется сам объект на который юникл

Firstname
19.09.2018
18:02:56
с чего бы вдруг?
а в чем их смысл тогда?

просто обертка над *?

Max
19.09.2018
18:03:20
а в чем их смысл тогда?
просто RAII-обёртка над raw-указателем.

Firstname
19.09.2018
18:03:47
удаление при обнулении указателя не происходит разве?

Max
19.09.2018
18:06:04
удаление при обнулении указателя не происходит разве?
для смартов - происходит. А ещё оно происходит просто при деструкции. Так что все tmp = nullptr в конце текущего scope можешь выкинуть.

Assasin
19.09.2018
18:06:35
как будто это java ))
в java тоже не происходит

Anton
19.09.2018
18:07:40
в java тоже не происходит
GC потом как-нибудь сделает ) наверное )

Assasin
19.09.2018
18:08:26
потом - да, и полагаться на это нельзя. А смартпоинтер в C++ при сбросе уничтожит сразу же

Max
19.09.2018
18:08:45
Ну смотрите, в insertAll я выделяю память для поддрева это поддрево прицепляю к тому, из которого вызывается insertAll
и я вообще не понимаю, чем занимается insertAll. За каким чёртом он создаёт ещё одно дерево, из которого потом переносит в своё, а это непонятное немедленно уничтожает?

Firstname
19.09.2018
18:10:35
для смартов - происходит. А ещё оно происходит просто при деструкции. Так что все tmp = nullptr в конце текущего scope можешь выкинуть.
ну а как ты тогда гарантируешь что юникл будет указывать на валидный объект? там же без копирования нужен счетчик ссылок?

Google
Max
19.09.2018
18:11:36
ну а как ты тогда гарантируешь что юникл будет указывать на валидный объект? там же без копирования нужен счетчик ссылок?
счётчик ссылок нужен как раз при копировании. А юник, ещё раз повторю, не копируется.

Firstname
19.09.2018
18:13:19
ммм может я хреново понимаю, что скорее всего так и есть, но как работает смарт поинтер? разве при обнулении он не вызывает delete от обьекта?

Assasin
19.09.2018
18:15:33
unique_ptr при вызове reset - да, сразу же и всегда (если объект был). shared_ptr - не всегда, а только когда счетчик ссылок (без учета weak_ptr) станет равен 0

Firstname
19.09.2018
18:18:40
а рест вызвыается когда уникалу присвается ноль или указатель на другой?

Max
19.09.2018
18:21:03
Bulk-loading алгоритм
на вскидку — он у тебя работает неправильно. Ты целиком новое дерево вставляешь между нодами. А нужно их сливать в одно, в зависимости от <> .

Assasin
19.09.2018
18:21:34
а рест вызвыается когда уникалу присвается ноль или указатель на другой?
юнику нельзя присвоить указатель, можно только вызвать reset

но он может принимать параметром другой указатель

Max
19.09.2018
18:23:37
подробнее что такое <>?
больше или меньше.

Assasin
19.09.2018
18:23:58
Max
19.09.2018
18:24:25
у тебя не получится бинарного дерева поиска на выходе.

Assasin
19.09.2018
18:24:27
Тут подробнее: https://ru.cppreference.com/w/cpp/memory/unique_ptr/operator%3D

Firstname
19.09.2018
18:25:08
у тебя не получится бинарного дерева поиска на выходе.
если что контейнер отсортирован который мы получаем

Assasin
19.09.2018
18:25:26
ну другой юник ещё.
и не просто присвоить, а переместить

Firstname
19.09.2018
18:26:48
если что контейнер отсортирован который мы получаем
для отсортированных вроде работает, почему нет?

Страница 2361 из 2477