Pull to refresh
-4
0
Александр @kovalexius

User

Send message
Такой вопрос:
А если shared_ptr Ptr( new MyClass[10] );?

Произойдёт ли корректное освобождение памяти и вызовы всех 10 деструкторов ~MyClass при выходе Ptr из области видимости?
Сам отвечу на первый вопрос — корректное освобождение памяти произойдёт по любому (даже если вызвать delete 'указатель на массив' без квадратных скобок происходит освобождение памяти под массив, а вот вызовы всех деструкторов — не факт), а что с shared_ptr — вызовет ли все деструкторы?
Такс, всё круто, но остались белые ( или черные пятна ).
Dictionary умеет ведь искать элементы, так? А также выбрасывать исключения, если такой элемент уже есть в коллекции?
Так вот что будет если:
1) добавляем элемент, скажем, 25 (тип int, поэтому его значение и хешкод совпадают). Количество корзин было 23. значит элемент добавился в корзину № 25 % 23 = 2, в корзину 2 значит. Так?
2) Добавилось в коллекцию кучу других элементов так, что словарь увеличился до 29. Так? Значит количество корзин стало 29. (просто создался массив из 29 элементов и 23 элемента скопировалось в 29), так?
3) В коллекцию приходит снова элемент 25, только теперь он распределяется не в корзину 2, а в корзину 25.
25 % 29 = 25 Правильно?

При этом коллекция не выбрасывает исключение, в коллекции оказывается два одинаковых значения, только расположены они в разных местах.

Если после расширения словаря, попробовать найти какой либо из раннее добавленных элементов, то он найден не будет.

Что, получается, что при расширении словаря меняется не только структура с корзинами, но и вообще вся структура? это же очень дорого, все равно что взять и передобавить все существующие элементы в коллекцию только с новым размером словаря. Или как?

Information

Rating
Does not participate
Date of birth
Registered
Activity