![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Modul |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Привожу мою ерунду:
My.h
My.cpp
main.cpp
--------------------
I'll be back ! |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Я и без примеров прекрасно понял о чем речь. Я не понял, ЗАЧЕМ? Назови хоть одну причину, по которой нужно городить такой неочевидный и опасный код? Какова вероятность, что человек не забудет вызывать деструктор перед вызовом create()? И если тебе нужно проинициализировать заново объект, то кто мешает использовать operator= или, если совсем критично по скорости, конструкцию My().swap(myObject)?
|
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Это по сабжу, что так можно.
Например, удаление (очистка) массы этих переменных. Ну, дорогой bsa, Вы же сами прекрасный программист. И степень опасности он же и определяет. Все в его ровных (или кривых) руках. p.s. Так никогда сам не делал, это к сабжу все. --------------------
I'll be back ! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
хороший пример, как ни в коем случае нельзя делать... |
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
"... а кто знает, тот не говорит" - народная китайская поговорка.
Расскажите почему, просим... --------------------
I'll be back ! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
главный ответ тут :
еще нужно вспомнить о правиле хорошего тона, о соблюдении симметрии создания и удаления.. ну и как результат в вашем примере будет либо двойной вызов деструктора, либо память не будет освобождена.. |
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Т.е. мы один раз удалили при удалении в деструкторе, а потом при удалении нашего объекта myObject еще раз. --------------------
I'll be back ! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
один раз Вы вызвали деструктор вручную, а второй раз вызовется при выходе за границы пользования (для стекового и статического объектов) или при вызове delete (для объекта кучи) обратите внимание на пример bsa.. память в которой размещается объект имеет тип char -т.е. пустой буфер, при удалении которого никаких деструкторов не надо.. |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
как ТС вставлю своё слово... вообще-то сабж был не "можно ли это" а
Добавлено через 1 минуту и 58 секунд вообще-то, я уже всё понял, поэтому отвечать на эти три вопроса не нужно -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Спасибо, borisbn, за Вашу тему !
Поэтому, она позволили не только Вам найти ответ на Ваш вопрос, но и мне и другим людям в сообществе. А плохо это или хорошо, это решать программисту. Спасибо большое всем ! --------------------
I'll be back ! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
К сожалению. С++ позволяет слишком многое, чем "пользуются" недостаточно опытные программисты, не знающие, чем это черевато. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
хотя и написана куча литературы, о том как сделать приятно и себе и людям.. |
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Философские мысли:
Как ужасно спится манагеру, который продает ужасную программу г....но клиенту с г...кодом. который приходит в 14-15 часов и говорит, ну что...клиент убегает, нас увольняют, закрывают... Потом приходит и говорит после 5 мин. базара, опа, А как мы вчера ДУНУЛИ !!! Надо спросить Бориса. --------------------
I'll be back ! |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
первое что приходит в голову - вызов деструктора, чтобы по этому же адресу вызвать явно конструктор
так можно заново проинициализировать объект, при этом все внешние ссылки на этот объект останутся валидными Это сообщение отредактировал(а) alexvs11 - 24.3.2011, 23:48 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |