
Berkus
21.01.2018
14:55:56

Oleg
21.01.2018
14:56:33
Нет же.
Там проверка на канутер виков. Еслм где-то есть вик, то не удаляется

Berkus
21.01.2018
14:56:56
For make_shared:
allocating 416 bytes
destructor MyLargeType <---- ВОТ ЖЕ
scope end...
global op delete called

Google

Berkus
21.01.2018
14:57:22

Oleg
21.01.2018
14:57:40
void _Decwref()
{ // decrement weak reference count
if (_MT_DECR(_Weaks) == 0)
{
_Delete_this();
}
}
Если где-то хранится вик, то delete-this не вызовется

Berkus
21.01.2018
14:58:57

Oleg
21.01.2018
14:59:38
Не понял. Объект удалился, но память не освободилась?

Alejandro
21.01.2018
14:59:55

Berkus
21.01.2018
14:59:57

Oleg
21.01.2018
15:01:35
Хм, я как-то раньше не задумывался о том, что при удалении шареда память может не освободиться

Олег
21.01.2018
15:03:48
Прикольно. Я теперь понял, что именно делают weak_ptr (в каком именно месте при правильном их использовании разрываются циклические зависимости объектов).

Alex Фэils?︙
21.01.2018
15:21:23

Ioann V
21.01.2018
15:36:38

Alex Фэils?︙
21.01.2018
15:37:21
там можно поменять генерацию опкодов

Berkus
21.01.2018
15:37:25

Google

Berkus
21.01.2018
15:58:42
https://www.youtube.com/watch?v=rTo2u13lVcQ немного издевательства над с++ со стороны растовщиков

Антон
21.01.2018
15:59:38
https://www.gitbook.com/download/pdf/book/tra38/essential-copying-and-pasting-from-stack-overflow хмххмхмхмххм

Alexander
21.01.2018
16:06:50

Berkus
21.01.2018
16:13:18

Alexander
21.01.2018
16:14:08
а в рантайме?
компилятор же не будет добавлять проверки такие в рантайм подсчёты
такое я думаю и крестовые компиляторы ловят. включи pedantic и -fsanitize=integere-overflow (или как он там зовётся)

Berkus
21.01.2018
16:16:26
ты не умеешь читать код? посмотри, там 10 строчками выше рантайм проверка
строка 6 и строка 24

Alexander
21.01.2018
16:18:02
ты передал константы и радуешься, что он отловил ошибки
найс
так ты с клавиатуры ввод орагнизуй. как в такой ситуации раст себя ведёт?

Berkus
21.01.2018
16:18:33
не тупи

Alexander
21.01.2018
16:19:07
а, блядь. пролистать мне не судьба
окей - а как такое отключить?

Berkus
21.01.2018
16:19:37
перейти на с++

Alexander
21.01.2018
16:19:46

Berkus
21.01.2018
16:20:08
есть, RUSTC=gcc в переменных среды

Google

Berkus
21.01.2018
16:20:16
но писать придется на си

Alexander
21.01.2018
16:20:24
?
понял. пасиб

Berkus
21.01.2018
16:25:46

Alexander
21.01.2018
16:26:13

Berkus
21.01.2018
16:31:05

Alexander
21.01.2018
16:33:14

Alejandro
21.01.2018
16:37:07

Berkus
21.01.2018
16:37:25

Серж
21.01.2018
18:01:32

Alexander
21.01.2018
18:01:56

Berkus
21.01.2018
18:02:17

Серж
21.01.2018
18:02:38
Но это не точно, один раз не растошиан
Да то же что и в си

Berkus
21.01.2018
18:03:04
а в расте нет
можно прочитать если что, полезно

Admin
ERROR: S client not available

Google

Berkus
21.01.2018
18:03:53
http://huonw.github.io/blog/2016/04/myths-and-legends-about-integer-overflow-in-rust/
я вот что нашёл

Серж
21.01.2018
18:05:59
Да, хотел на это ссылку кинуть, выжимки:
in debug mode, arithmetic (+, -, etc.) on signed and unsigned primitive integers is checked for overflow, panicking if it occurs, and,
in release mode, overflow is not checked and is specified to wrap as two’s complement.

Berkus
21.01.2018
18:18:23
> is specified to wrap as two’s complement.
никакого UB как видишь

Ioann V
21.01.2018
18:23:02
Ребят. Нубо вопрос. Как можно узнать подробную спецификацию своего процессора ? Ну типа, количество регистров для dbl precission вычислений и так далее ?

Berkus
21.01.2018
18:23:48

Ioann V
21.01.2018
18:24:17
Да я не из С++ хочу, кек. Я хотел просто программно :) Через готовенькое уже.

Berkus
21.01.2018
18:26:54
портабельно никак

Alexander
21.01.2018
19:03:40
https://kristerw.blogspot.com.by/2018/01/gcc-back-end-performance-tuning.html

fox.cpp
21.01.2018
22:07:46
Парни, уткнулся в SIGSEGV, когда написал наследника std::error_category и заменил им std::system_category().
test_category instance;
void test(std::error_code& ec) {
ec = {1, test_category()};
// If replaced with: ec = {1, std::system_category()};
// or with: ec = {1, instance};
// then it works.
}
int main() {
std::error_code ec;
test(ec);
ec.message(); // SIGSEGV here
}
Добавил виртуальный деструктор в test_category, как и положено, вызывается при выходе из test.
Меня очень сильно удивило то, что всё прекрасно работает с категорией из std. Почему так и есть ли варианты фикса моего случая кроме глобального экземпляра?
—
Полный минимальный воспроизводимый пример, вывод LLDB, UBSan и Valgrind:
https://hastebin.com/cegegirodi.cpp

Alexander
21.01.2018
22:09:39
ec = {1, test_category()};
какой конструктор тут вызывается?

fox.cpp
21.01.2018
22:12:16
Дефолтный конструктор test_category, разумеется. Добавил его, вызывается исправно.

Alexander
21.01.2018
22:21:17
он запоминает указатель на твою категорию. отсюда и ошибка

fox.cpp
21.01.2018
22:23:17
Хорошо, только... Каким боком с std::system_category работать может?
Я что-то совсем теряюсь в догадках.
И, блин, почему нет виртуальных конструкторов копирования?)

Berkus
21.01.2018
22:25:35
потому что они нинужны?

Alexander
21.01.2018
22:26:12
Obtains a reference to the static error category object for errors reported by the operating system.

Google

Berkus
21.01.2018
22:26:26

Alexander
21.01.2018
22:26:28
static

Berkus
21.01.2018
22:26:38
а, ну вот

fox.cpp
21.01.2018
22:26:39
Блин.
Обманщики.
Я думал, что это тип(