Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335

Выпиливание экземпляра класса самим собой

11.10.2012, 16:52. Показов 2586. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наслышан и начитан о плохом тоне и ub команды delete this, однако, будет ли ошибкой вызывать вместо delete this деструктор?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class SECURITY
{
*some data*
public :
SECURITY()
{
*check something, and it is wrong*
~SECURITY();
*ну а здесь уже нет никаких обращений к полям класса или функциям, работающими с полями*
}
~SECURITY()
{
delete *somedata*;
delete [] *somedata*;
...
}
}
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.10.2012, 16:52
Ответы с готовыми решениями:

Создание нового экземпляра дочернего класса из экземпляра базового
Всем привет! Извиняюсь, если вопрос глупый, но что-то не смог найти конкретный ответ на него... У меня есть несколько классов: все они...

При создании экземпляра класса, создается 2 экземпляра вместо 1
Подсчет экземпляров ведется с помощью статического члена num_dogs, который во всех трех конструкторах (1. по умолчанию, 2. со всеми...

Сложение экземпляра базового класса и экземпляра наследника
Добрый вечер! Моя задача - сложить экземпляр базового класса и наследника. Нужно сделать так, чтобы результат сложения "знал"...

29
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
14.10.2012, 10:25  [ТС]
Студворк — интернет-сервис помощи студентам
Deviaphan,
т.е структура вида :
C++
1
2
3
4
5
6
7
8
9
10
11
12
CLS::CLS()
{
/*абсолютное заполнение полей и, если нужно, выбрасывание exception-ов
 с отчисткой памяти конструктора и уже присовенных участков типа char *buffer = new char[x]...*/
if (Dialog() == PROCESS_FAILURE)
throw something;
else
{
printf("Something success");
throw success;
}
}
, где Dialog() активно юзает и поля класса и его методы, хотя конструктор ещё не выполнен до конца.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
14.10.2012, 11:10
nexen, Меня долго мучал этот вопрос, но я все думал, что используется нечто другое... В общем, зачем вы кидаете исключение, если все завершилось хорошо? Или это опять оговорено в условии?
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
14.10.2012, 11:16  [ТС]
soon, как-то на автомате вышло написать "throw success". В реалии при завершении "success" у меня просто довызывается конструктор, а в конце программы вызывается delete уже из main.
Так ведь можно?
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
14.10.2012, 11:25
nexen, довызывается?
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
14.10.2012, 15:33  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
nexen, довызывается?
Имеется ввиду, что :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
CLS::CLS()
{
/*абсолютное заполнение полей и, если нужно, выбрасывание exception-ов
 с отчисткой памяти конструктора и уже присовенных участков типа char *buffer = new char[x]...*/
if (Dialog() == PROCESS_FAILURE)
throw something;
else
{
printf("Something success");
}
// если success, то конструктор завершает свою работу с штатном режиме, а в \
main экземпляр выпиливается delete.
}
Добавлено через 3 часа 43 минуты
Не позволительно так? ;(
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
14.10.2012, 15:55
nexen, можно.
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.10.2012, 17:16
Лучше вызови вручную мтеод Dialog после создания объекта. Чем проще код, тем лучше.
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
15.10.2012, 06:57  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Лучше вызови вручную мтеод Dialog после создания объекта. Чем проще код, тем лучше.
Это то понятно, что так можно, но, насколько я помню, стиль типа :
C++
1
2
3
4
5
int main ()
{
GAME game = new GAME();
return 0;
}
обычно и используется. Т.е только инициализируются новые экземпляры, где и происходит всё "буйство красок". Вот и хотелось сделать так же с двумя экземплярами.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
15.10.2012, 07:15
Цитата Сообщение от nexen Посмотреть сообщение
GAME game = new GAME();
Либо ты перепутал с C#, либо у тебя утечка памяти будет.)
И ни в коем случае не используй вышеприведённый способ. Конструктор должен конструировать объект. ВСЁ! Не нужно впихивать в него невпихуемое!
Напиши
C++
1
2
GAME game;
game.Run();
и не мучай свой мозг.)
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
15.10.2012, 09:20  [ТС]
Deviaphan, ; ( Ну хорошо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2012, 09:20

Удаление экземпляра класса в функции самого класса (Ошибка при отладке)
Допустим, у нас есть класс Buffer, который хранит в себе указатель на класс некоторой матрицы и количество этих указателей refcounter ...

Передача свойства одного экземпляра класса другому экземпляру класса
#include <tchar.h> class A { public: A(); int aVar; }; class B : public A

Явное создание экземпляра класса и явная специализация шаблона класса
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое?...

Как построить экземпляр дочернего класса на основе готового экземпляра базового класса?
Если уже есть готовый объект базового класса. Могу я построить экземпляр дочернего на его основе, (напр., получив такой базовый объект...

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru