Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

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

11.10.2012, 16:52. Просмотров 975. Ответов 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*;
...
}
}
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 16:52     Выпиливание экземпляра класса самим собой
Посмотрите здесь:

Создание экземпляра класса - C++
всем доброго времени суток! подскажите такую вещь: есть класс, нужно создать объект этого класса, но не программно (тоесть уже при работе...

Создать массив экземпляра класса - C++
Всем привет, есть класс, конструктор которого, рисует квадратик на плоскости. Мне нужно создавать в одной точке плоскости много...

Способ создания экземпляра класса - C++
Ниже в скрипте отметила два варианта. В чужих скриптах встречаю оба время от времени. Интересно, в чем принципиальное различие и как...

Возврат функцией экземпляра класса - C++
Подскажите, будет ли корректной с точки зрения выделения памяти и всего прочего такая запись: MyObject fun(....) { myObject Obj =...

Создание экземпляра класса из DLL - C++
Привет всем, Подскажите, пожалуйста, как создать экземпляр класса из DLL? В C# это просто сделать, в JS есть вспомогательный метод...

Проблема с созданием экземпляра класса - C++
Добрый день! Есть файл "File.cpp", в нём находится точка входа и класс "Helper". Пытаюсь создать инстанс класса Helper: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
14.10.2012, 10:25  [ТС]     Выпиливание экземпляра класса самим собой #21
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() активно юзает и поля класса и его методы, хотя конструктор ещё не выполнен до конца.
soon
2539 / 1304 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
14.10.2012, 11:10     Выпиливание экземпляра класса самим собой #22
nexen, Меня долго мучал этот вопрос, но я все думал, что используется нечто другое... В общем, зачем вы кидаете исключение, если все завершилось хорошо? Или это опять оговорено в условии?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
14.10.2012, 11:16  [ТС]     Выпиливание экземпляра класса самим собой #23
soon, как-то на автомате вышло написать "throw success". В реалии при завершении "success" у меня просто довызывается конструктор, а в конце программы вызывается delete уже из main.
Так ведь можно?
soon
2539 / 1304 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
14.10.2012, 11:25     Выпиливание экземпляра класса самим собой #24
nexen, довызывается?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
14.10.2012, 15:33  [ТС]     Выпиливание экземпляра класса самим собой #25
Цитата Сообщение от 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 минуты
Не позволительно так? ;(
soon
2539 / 1304 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
14.10.2012, 15:55     Выпиливание экземпляра класса самим собой #26
nexen, можно.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.10.2012, 17:16     Выпиливание экземпляра класса самим собой #27
Лучше вызови вручную мтеод Dialog после создания объекта. Чем проще код, тем лучше.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
15.10.2012, 06:57  [ТС]     Выпиливание экземпляра класса самим собой #28
Цитата Сообщение от Deviaphan Посмотреть сообщение
Лучше вызови вручную мтеод Dialog после создания объекта. Чем проще код, тем лучше.
Это то понятно, что так можно, но, насколько я помню, стиль типа :
C++
1
2
3
4
5
int main ()
{
GAME game = new GAME();
return 0;
}
обычно и используется. Т.е только инициализируются новые экземпляры, где и происходит всё "буйство красок". Вот и хотелось сделать так же с двумя экземплярами.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.10.2012, 07:15     Выпиливание экземпляра класса самим собой #29
Цитата Сообщение от nexen Посмотреть сообщение
GAME game = new GAME();
Либо ты перепутал с C#, либо у тебя утечка памяти будет.)
И ни в коем случае не используй вышеприведённый способ. Конструктор должен конструировать объект. ВСЁ! Не нужно впихивать в него невпихуемое!
Напиши
C++
1
2
GAME game;
game.Run();
и не мучай свой мозг.)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 09:20     Выпиливание экземпляра класса самим собой
Еще ссылки по теме:

Ошибка в создании экземпляра класса - C++
Начал изучать шаблоны , и не могу переделать , подскажите что не так . template <class data_one> class linklist { private: ...

Ошибка создания экземпляра класса - C++
Собственно ошибка в мейне error C2227: left of '->AddLast' must point to class/struct/union/generic type Содержимое StringList.h: ...

Создание экземпляра шаблона класса - C++
Есть код: #include <iostream> #include <string> #include <vector> //======================================== template...

Освобождение памяти от экземпляра класса - C++
есть класс : Message есть контейнер типа : multimap<int,Message> myQueue этот контейнер формируется так Message *c_message = new...


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

Или воспользуйтесь поиском по форуму:
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
15.10.2012, 09:20  [ТС]     Выпиливание экземпляра класса самим собой #30
Deviaphan, ; ( Ну хорошо
Yandex
Объявления
15.10.2012, 09:20     Выпиливание экземпляра класса самим собой
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru