![]() |
Ответ: Нравится/Не нравится C++ (из темы "Ваш первый раз")
Цитата:
Недавно юзал map, в доках написано, что при обращении к несуществующей связке KeyPair кидается эксепшен. Что за хрень? Зачем сносить очередь выполнения эксепшеном из-за того, что я обратился по несуществующему ключу? Проверял Map.FindKey-ем, который выдает итератор, который сравнивал с Map.end(). Ну вообще не удобно на самом деле тут вышло. в С# можно обратится по несуществующему ключу и получить null для объектов. https://msdn.microsoft.com/ru-ru/lib...vs.110%29.aspx |
Ответ: Нравится/Не нравится C++ (из темы "Ваш первый раз")
Цитата:
Вкратце unique_ptr освобождает память при выходе из области видимости\в деструкторе\ при выходе из приложения. shared_ptr позволяет разделять владение указателем между разными участками приложения, и когда на сырой указатель больше никто не ссылается - он удаляется вместе с последним shared_ptr владеющим им. Очень удобная штука для управления ресурсами. weak_ptr устраняет циклические зависимости, когда в объекте А есть shared_ptr<B>, а в объекте B есть shared_ptr<A>. Помимо этого этим указателем удобно проверять наличие ресурса, и загружать его по мере необходимости. |
Ответ: Нравится/Не нравится C++ (из темы "Ваш первый раз")
Цитата:
типа type value = mapa[key]; // один лукап use(value); if (value!=NULL)... ----- шарпик: type value = mapa[key]; // слови ошибку, если key нет ----- if (mapa.ContainsKey(key)) { // первый лукап type value = mapa[key]; // повторный лукап. зачем? use(value); ... } else { use(null); } работает, но медленно ----- type value = 0; if (mapa.TryGetValue(key, out value)) { use(value); ... } else { use(null); } работает, но некрасиво |
Ответ: Нравится/Не нравится C++ (из темы "Ваш первый раз")
А если я в Dictionary и хочу хранить нулль?
Тогда получается двусмысленность: либо там нулль из-за того, что нет такого ключа, либо нуль потому что я его туда положил. |
Ответ: Нравится/Не нравится C++ (из темы "Ваш первый раз")
Подхвачу мысль, у меня были ситуации, когда нужно было разграничивать отсутствие ключа и наличие ключа без значения.
|
Ответ: Нравится/Не нравится C++ (из темы "Ваш первый раз")
Цитата:
А еще если немного поизучать C#/CLR, то обнаружится что типы бывают не только reference type (object, List, Bitmap и т.д., те которые хранятся в куче), но и value type (это те которые лежат на стеке). Думаете проблема "сохранил ли я null, или это null потому что там ничего не было" такая острая? Пример еще более проблемный: Код:
Dictionary<string, bool> settings = settingsManager.GetSettings(); В этом примере что должен вернуть словарь, если ключа setting1 нет и никогда не было? true? false? А вот и хер его знает. Поэтому такое поведение с исключением и существует. Dictionary - коллекция общего назначения, поэтому ее старались сделать так чтобы подходила к любым ситуациям в равной степени. К слову, есть коллекции где поведение "вернуть null, если даже ключа нет" является приемлемым. Например, в ASP NET Session (по сути, тоже словарь). И вообще, если тебе так нужно чтобы словарь возвращал значение по умолчанию, в случае отсутствия ключа - то взял бы да написал сам, там кода 10 строк один раз написать: https://dotnetfiddle.net/GXdtAS, для reference типов будет возвращать null, для value типов значение по умолчанию (для int 0, для bool false и т.д.) |
Часовой пояс GMT +4, время: 11:55. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot