Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197

Правильное уничтожение объекта

16.10.2016, 16:35. Показов 1492. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, имеется следующий вопрос!

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

C++
1
2
3
4
5
6
7
8
9
10
Application::Application(int& argc, char** argv) : pathToDir(""), amountOfThreads(2) {
    
    if(!parseArgs(argc, argv)) {
        /*вывод некоторых сообщений*/
                /*(1)*/
        return;
    }
 
 
}
Подскажите пожалуйста как ПРАВИЛЬНО уничтожить объект, если в ходе парсинга (в конструкторе) я встретил невалидные данные?
Т.е. внутри блока if(!parseArgs).

Можно ли в блок (1) поместить одну из следующих строк?

C++
1
2
// 1. this->Application::~Application();
// 2. delete this;
Добавлено через 44 секунды
Проверку данных хочется сделать именно в конструкторе, чтобы не заводить "безымянных" функций
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2016, 16:35
Ответы с готовыми решениями:

Поменять make и release так, чтобы организовать правильное уничтожение объектов и освобождение памяти
Имеем код: #include <iostream> struct Base { public: ~Base() { std::cout << "Base::~Base" << std::endl; } ...

Правильное выделение памяти объекта
Здравствуйте. не могу понять как правильно реализовать создание объектов, в зависимости от условия. Вот есть у меня базовый класс ...

Правильное удаление массива объектов внутри другого объекта
Есть, предположим, два класса: struct vec { int* vector; vec(int lengt) { vector = new int; } ~vec() {

5
 Аватар для Ryuk
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
16.10.2016, 16:41
PakistanCode, если объект будет сразу уничтожаться то его невозможно будет использовать. Т.е. если где-то будет вызываться какой-то метод объекта этого класса, у вас возникнут проблемы.
1
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
16.10.2016, 16:45
PakistanCode, ну в таком удалении вы точно получите UB, пока идеи выкинуть исключение и в catch удалить объект

Добавлено через 2 минуты
но вы тоже должны помнить о трудностях, которые возникают с исключениями в констуркторе
1
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
16.10.2016, 16:45  [ТС]
obivan, т.е. как я понял стоит лучше перед созданием экземпляра класса проводить необходимые проверки (не в конструкторе) и только при условии что данные являются валидными - создавать объект? А если данные являются некорректными - просто не создавать объект?
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
16.10.2016, 17:10
Лучший ответ Сообщение было отмечено PakistanCode как решение

Решение

PakistanCode, ну как по мне это лучший вариант
1
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
16.10.2016, 17:24  [ТС]
obivan, спасибо большое за совет!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2016, 17:24
Помогаю со студенческими работами здесь

Уничтожение объекта
здравствуйте, подскажите пожалуйста можно ли удалить объект класса "изнутри"? а "снаружи" только приравняв объекту null? ...

Уничтожение объекта
В программе создаю класс с атрибутом(полем) QProcess *proc; в конструкторе выделяю память proc=new QProcess(this);. По нажатию клавиши...

Уничтожение объекта
Добрый день! Как сделать объект допустим форму, само-уничтожаемой? Это что то похожее на алерты справа где часы, только это экземпляры...

Уничтожение объекта в процедуре.
Всем привет. Вопрос если создаю объект в процедуре то при ее окончании он должен быть уничтожен, а выделенная ему память останется...

Создание и уничтожение объекта
Всем привет! Давно известная проблема "Statement expected but 'PROCEDURE' found" постигла и меня. На Delphi сижу совсем недавно, поэтому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru