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

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

Восстановить пароль Регистрация
 
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
11.10.2012, 16:52     Выпиливание экземпляра класса самим собой #1
Наслышан и начитан о плохом тоне и 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++ Как построить экземпляр дочернего класса на основе готового экземпляра базового класса?
C++ Создание нового экземпляра дочернего класса из экземпляра базового
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
 Аватар для soon
2536 / 1301 / 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
 Аватар для soon
2536 / 1301 / 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
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
14.10.2012, 15:55     Выпиливание экземпляра класса самим собой #26
nexen, можно.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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++
 Аватар для Deviaphan
1283 / 1217 / 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++ Создание экземпляра класса до определения класса
Передача свойства одного экземпляра класса другому экземпляру класса C++
C++ Видимость экземпляра класса внутри класса

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

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

Текущее время: 01:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru