Мировой уровень

Nov 11, 2024 22:08

В одной части одной довольно широко известной БД используется штука под названием boost::ptr_vector. Хранит он массив указателей, приведённых к void ( Read more... )

программисты, ошибки программ, программирование, работа

Leave a comment

Comments 19

alll November 11 2024, 22:29:28 UTC

Так там же вроде не сугубо двойное освобождение памяти, там просто битый указатель получается после удаления либо оригинала, либо "неглубокой-копии-для-бедных"? А как об него споткнутся, попыткой доступа к произвольному месту элемента в произвольный момент или повторным освобождением при завершении программы (или не при завершении) - это уж дело случая.

Reply

thesz November 11 2024, 22:48:11 UTC
zadiga* a = new booga(luna, mana);
auto* b = a;
delete a;
delete b;Это вот оно, использование boost::ptr_vector с копированием между переменными.

Разница между программистами мирового уровня и обычными программистами в недопущении "дела случая," когда работают последние. ;)

Reply

alll November 11 2024, 23:03:23 UTC

delete b; - это частный случай
Вполне может упасть и об b->...
Причём узнать, что кто-то уже сделал delete a; в произвольный момент в общем случае никак невозможно. Единственный пожалуй вариант, чтоб оно не падало где попало - обрезание "общих случаев" до совсем частных разного рода джентльменскими соглашениями типа "все delete только при завершении программы", но это несколько попахивает безумием.

Это собственно разница между техлидами, кто-то продумывает и навязывает какие-то полиси и практики, а кто-то пускает на самотёк под соусом "ну у нас же все программисты мирового класса, ну не могут же они" - и первый же залетевший дятел что-то там делает с цивилизацией.

Reply

thesz November 11 2024, 23:23:12 UTC
Я же в самом начале сказал, что всё падает на деструкторе всеобъемлющего объекта.

Все ссылки до этого момента живые и могут быть спокойно адресованы. Более того, копии живы, со всеми их ссылками (что живы).

А вот во время работы деструктора всё и проявляется. Двойное освобождение, нарушение защиты и так далее, и тому подобное. ;)

Reply


Leave a comment

Up