Axbor Опубликовано 9 января, 2016 Поделиться Опубликовано 9 января, 2016 Где то прочитал что dynamic_cast помогает избежать утечек памяти. Как с этим работать? Если можно пример где обязательно нужно использовать это. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 9 января, 2016 Модераторы Поделиться Опубликовано 9 января, 2016 https://ru.wikipedia.org/wiki/Dynamic_cast Цитата Ссылка на комментарий
0 Axbor Опубликовано 10 января, 2016 Автор Поделиться Опубликовано 10 января, 2016 https://ru.wikipedia.org/wiki/Dynamic_cast А что будет если не использовать его? Можно ли не использовать когда я знаю точно что тип объекта именно такой? Помогает ли оно избежать утечек памяти? Цитата Ссылка на комментарий
0 d7d1cd Опубликовано 11 января, 2016 Поделиться Опубликовано 11 января, 2016 Если Вам не нужно приводить переменную одного класса к переменной другого класса, то и использование dynamic_cast Вам не понадобится. Про приведение типов: void __fastcall TForm1::Button1Click(TObject *Sender) { double dbl = 123.45; int i = (int)dbl; // Приведение значения типа double к значению типа int TButton *btn = dynamic_cast<TButton*>(Sender); // Приведение объекта типа TObject к объекту типа TButton ShowMessage(L"Нажата кнопка с именем " + btn->Name); // Нельзя привести типы классов так: TButton *btn = (TButton*)Sender; } Цитата Ссылка на комментарий
0 POV Опубликовано 11 января, 2016 Поделиться Опубликовано 11 января, 2016 (изменено) Если Вам не нужно приводить переменную одного класса к переменной другого класса, то и использование dynamic_cast Вам не понадобится. Про приведение типов: void __fastcall TForm1::Button1Click(TObject *Sender) { // Нельзя привести типы классов так: TButton *btn = (TButton*)Sender; } Отчего же?! Конечно так можно ))) .. но если это "сильно разные" компоненты, то произойдет исключение. При dynamic_cast будет красивый и безопасный Nil в указателе. Изменено 11 января, 2016 пользователем POV Цитата Ссылка на комментарий
0 d7d1cd Опубликовано 11 января, 2016 Поделиться Опубликовано 11 января, 2016 (изменено) Ну у меня был просто пример. А так можно и деление на ноль прописать и просто потом поймать исключение. Так что приводить типы классов, я считаю, надо только через dynamic_cast, а еще можно через static_cast. Как правильнее я не знаю. Думаю, что dynamic_cast выполняет приведение типов во время выполнения программы, а static_cast выполняет проверку допустимости приведения типов на этапе компиляции. Бородатый анекдот в тему. Программист должен предусмотреть все варианты развития событий. И когда он ложится спать, то должен поставить на тумбочку 2 стакана: один с водой, один пустой. С водой на случай если ночью захочется пить, пустой на случай если не захочется. Изменено 11 января, 2016 пользователем d7d1cd Равиль Зарипов (ZuBy) 1 Цитата Ссылка на комментарий
0 Axbor Опубликовано 11 января, 2016 Автор Поделиться Опубликовано 11 января, 2016 Спасибо всем за ответы. Цитата Ссылка на комментарий
Вопрос
Axbor
Где то прочитал что dynamic_cast помогает избежать утечек памяти. Как с этим работать? Если можно пример где обязательно нужно использовать это.
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.