LINUX.ORG.RU

С++ удаляет локальные переменные

 


0

1

Узнал ужасную вещь. С++ удаляет локальные переменные.
Допустим создал я объект

Myclass xxx;
xxx.onready = func
xxx.start();

Создался объект, запустил start... Иии... Умер. Потом с++ запускает деструктор объекта. А мой колбек onready не дождется своего выхода.
Это нормально? Я же сам не удалял объект через delete. То есть получается компилятор сам за меня решает?

★★★★

Последнее исправление: cetjs2 (всего исправлений: 2)

@gobot Лиза, пойдем вечером гулять с собакой? У меня для тебя есть подарок.

anonymous
()
Ответ на: комментарий от anonymous

Это не зависит от сборки мусора. Можно сделать и без сборки мусора хорошо. Просто исторически так сложилось.

vlad9486
()
Ответ на: комментарий от BackDoorLover

А чо «мяу»-то. Ну почитай сам что-ли. От того, что эту старорежимную протухшую хрень на замену маллоку к сям можно привентить, эти си внезапнг по волшебству полноценным языком со сборкой мусора не станут.

anonymous
()

Хотя раст не любят здесь на ЛОРе (а где любят?), но здесь он тебе помог бы, не дав скомпилировать твой неверный код. Если у тебя туго идет с C++, то дай шанс языку раст тоже - тебе понравится!

anonymous
()
Ответ на: комментарий от anonymous

раст тоже - тебе понравится

Ты тоже раст? Мы - расты, должны держаться вместе.

Словно облако из роз
я люблю тебя до слез

Владимир

anonymous
()
Ответ на: комментарий от menangen

В питоне вместо таких проблем это решение принесло другие проблемы

AntonI ★★★★
()

Создался объект, запустил start… Иии… Умер. Потом с++ запускает деструктор объекта. А мой колбек onready не дождется своего выхода.

Я тебя породил, я тебя и убью! - сказал объекту на стеке компилятор.

AntonI ★★★★
()
Ответ на: комментарий от AntonI

Я тебя породил, я тебя и убью! - сказал объекту на стеке компилятор.

Главное, чтобы тебе самому было смешно, а все остальное не важно.

anonymous
()
Ответ на: комментарий от BackDoorLover

Мяу!

Когда коту делать нечего, он яйца лижет.

anonymous
()

Windows не поругать - день зря прошел …

В чем было дело. Странная система Windows.
Похоже, что в зависимости от каких-то факторов типа сервис-пака, установленных программ, текущих патчей, черта лысого, Винда меняет уровень своей лояльности к ошибкам в программе. 
Первая обнаруженная при вчерашней "атаки тестированием" ошибка заключалась в зацикливании сообщения главному окну.  
У меня (и похоже, что у большинства пользователей) через несколько шагов в зацикливании Винда этот цикл прерывала и дальше шла нормальная работа.  
У victuan1 итогом этой зацикленности был вылет 1С. Проблема решилась переносом места инициализации класса сворачивания 1С в иконку к часам.
Вторая ошибка, которую ловили уже общением по почте, постепенно отключая-включая функционал FormEx, заключалась в вызове оригинальной WNDPROC при перехвате процедуры главного окна.  
У меня в коде был прописан древний стиль:
((WNDPROC)hMainWndProc)(hWnd, nMessage, wParam, lParam);  
И это почему-то нормально работало даже на новейших системах.  
Хотя, судя по результатам поиска, должно было перестать работать еще на WinXP SP3. Все заработало после замены на рекомендуемые вызов:  
::CallWindowProc((WNDPROC)hMainWndProc,hWnd, nMessage, wParam, lParam);

Вот как-то так... Мир полон загадок и открытий.

Владимир

anonymous
()

Windows не поругать - день зря прошел …

В чем было дело. Странная система Windows.
Похоже, что в зависимости от каких-то факторов типа сервис-пака, установленных программ, текущих патчей, черта лысого, Винда меняет уровень своей лояльности к ошибкам в программе. 
Первая обнаруженная при вчерашней "атаки тестированием" ошибка заключалась в зацикливании сообщения главному окну.  
У меня (и похоже, что у большинства пользователей) через несколько шагов в зацикливании Винда этот цикл прерывала и дальше шла нормальная работа.  
У victuan1 итогом этой зацикленности был вылет 1С. Проблема решилась переносом места инициализации класса сворачивания 1С в иконку к часам.
Вторая ошибка, которую ловили уже общением по почте, постепенно отключая-включая функционал FormEx, заключалась в вызове оригинальной WNDPROC при перехвате процедуры главного окна.  
У меня в коде был прописан древний стиль:
((WNDPROC)hMainWndProc)(hWnd, nMessage, wParam, lParam);  
И это почему-то нормально работало даже на новейших системах.  
Хотя, судя по результатам поиска, должно было перестать работать еще на WinXP SP3. Все заработало после замены на рекомендуемые вызов:  
::CallWindowProc((WNDPROC)hMainWndProc,hWnd, nMessage, wParam, lParam);

Вот как-то так... Мир полон загадок и открытий.

Владимир

anonymous
()

Ну и проблемы у людей. А всё из-за того, что не хотят читать буквари по технологии, которую используют. Позорище безграмотное!

Reset ★★★★★
()
Ответ на: комментарий от Reset

Ну и проблемы у людей. А всё из-за того, что не хотят читать буквари по технологии, которую используют. Позорище безграмотное!

Ссылка на «квест».
https://forum.mista.ru/topic.php?id=861846&page=5 v7: Добавил пару методов в FormEx

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Разработка ИМХО более увлекательна /а главное польза от потраченного времени есть/ чем в игры «балду гонять».

Владимир

anonymous
()

Да троллишь. Недавно же писал, что выучил c++.

ox55ff ★★★★★
()
Ответ на: удаленный комментарий

Когда его забанили активность Владимира резко возросла, сохранив тематику общения Делириума. Не то чтобы я против, но там реально начался перебор. Вероятно ещё 1 Владимир решил помочь.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от peregrine
Я люблю тебя до слез, ты как облако из роз
наше ложе застелю, я до слез тебя люблю

Владимир

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.