Russian Qt Forum

Qt => Вопросы новичков => Тема начата: AK от Декабрь 15, 2020, 11:22



Название: Как вызываются деструкторы
Отправлено: AK от Декабрь 15, 2020, 11:22
Уважаемые специалисты, я, увы, новичок в C++ и Qt вопрос, как следует вызывать деструкторы
1. Правильно ли я понимаю, что динамически-созданные объекты классов, наследующих QObject, всегда уничтожаются Qt автоматически? Т.е. явно вызывать "delete S;" после  "QString S; S = new QString("Abc");..." не нужно?
2. Если я создаю статически, скажем "QString S = "Abc";"  как поле класса, то должен в деструкторе класса обязательно написать "S.~QString();" ?
3. Если я объявил "QString S = "Abc";", как локальную переменную метода, то деструктор можно не вызывать, так как объект S будет размещен в стеке и память выделенная S будет освобождена после завершения выполнения метода?
4. Во всех примерах создания оконных приложений:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow winMain;
    winMain.show();
    return app.exec();
}

Объект MainWindow создается статически, получается, его деструктор не будет вызван никогда?
Тогда если полями MainWindow у меня являются динамические массивы, то единственная возможность их удались перед завершением работы приложения - написать слот для сигнала  aboutToQuit() QApplication?




Название: Re: Как вызываются деструкторы
Отправлено: ssoft от Декабрь 15, 2020, 12:19
Здесь собственно отвечать не на что. По каждому вопросу нужно отправлять учить основы C++.

1. Нет, не правильно. См. https://doc.qt.io/qt-5/objecttrees.html
2. Нет, не правильно. Что значит статически и что такое деструктор, когда он вызывается и нужно ли его вызывать явно?
3. То же самое. Читайте про область видимости переменных и порядок их инициализации и удаления.
4. Тоже полная ерунда написана. Следует из непонимания 2 и 3.


Название: Re: Как вызываются деструкторы
Отправлено: AK от Декабрь 15, 2020, 12:48
 Я вот и пытаюсь учить, книжки читаю, но вопросы остаются.
1. Спасибо по п. 1 вроде понял: при удалении родителя все дочерние объекты будут также удалены.
2. Частично понятно из п.1. Про "статически" снялся вопрос. Но в основном непонятно. Я представляю себе так: я создал объект QString s="Abc" Где-то в памяти, наверное, в куче, размещено "Abc". Перед закрытием программы следует очистить память. Для этого нужно явно или неявно вызвать деструктор. QString не является наследником другого объекта QObject (п.1), поэтому следует вызвать деструктор явно. Правильно ли я рассуждаю?
3. Из того, что читал следует, что переменные могут размещаться в отдельном сегменте данных (глобальные переменные),  время жизни = времени жизни программы, в стеке (локальные переменные функций и методов) время жизни = времени выполнения функции/метода, в куче там время жизни - пока явно не удалю. Если объект объявлен в методе, он - локальная переменная, все, что его касается, хранится в стеке, правда, он может выделить память в куче. Опять же нужно явно вызывать деструктор получается?
4.  Ну да, я не понимаю ни основы C++ ни специфику Qt, пытаюсь разобраться,  в книжках ответы не нашел, потому и спрашиваю :) По моей логике (порочной судя по брезгливому комментарию) надо явно вызвать деструктор MainWindow, в котором освободить всю выделенную под массивы в куче память и вызвать деструкторы всех созданных объектов. Но такой деструктор в изученных мной примерах никто не делает. Очевидно, я где-то не прав, но не понимаю где.


Название: Re: Как вызываются деструкторы
Отправлено: Пантер от Декабрь 15, 2020, 12:56
У тебя MainWindow создается не статически, а на стеке, он будет автоматически разрушен (с вызовом деструктора) при выходе из функции main. При разрушении экземпляра класса все его не динамические члены так же разрушаются.


Название: Re: Как вызываются деструкторы
Отправлено: AK от Декабрь 15, 2020, 13:26
Ааа, Пантер, спасибо большое!


Название: Re: Как вызываются деструкторы
Отправлено: Igors от Декабрь 15, 2020, 14:07
Возможно лучше пожевать что-то одно, напр
3. Если я объявил "QString S = "Abc";", как локальную переменную метода, то деструктор можно не вызывать, так как объект S будет размещен в стеке и память выделенная S будет освобождена после завершения выполнения метода?
Сам по себе S - указатель (грубо говоря), да, размещен в стеке. А вот "Abc" (что может быть очень большим) объект S разместит в куче. При выходе из области видимости S c ним самим ничего не происходит, просто занимаемая этим указателем память будет доступна для использования, и, вероятно, скоро кeм-то будет занята. Но до того автоматычно вызовется деструктор, он освободит "Abc" в куче.

Отсюда следует что "деструктор можно не вызывать" - неверно, здесь правильно "деструктор нельзя вызывать" т.к. это поведет к повторному удалению "Abc" и крашу (в лучшем случае)

Есть простое утверждение типа "деструктор никогда не должен вызываться напрямую", и оно, в общем, верно. Редкие исключения подтверждают это правило. Если хотите изучить "но совесть" - приведите такой редкий пример  :)


Название: Re: Как вызываются деструкторы
Отправлено: AK от Декабрь 15, 2020, 14:31
Igors, спасибо!! Очень полезное обсуждение. Прямо чувствую, как умнею! :)



Название: Re: Как вызываются деструкторы
Отправлено: AK от Декабрь 15, 2020, 14:32
Буду думать над редким примером


Название: Re: Как вызываются деструкторы
Отправлено: AK от Декабрь 15, 2020, 14:40
В каком-то смысле, явного деструктора требуют динамически создаваемые объекты, он при вызове delete вызывается, на сколько я понимаю. Далее надо думать..


Название: Re: Как вызываются деструкторы
Отправлено: AK от Декабрь 15, 2020, 14:42
Видимо, если объявить объект, как глобальную переменную, а не на стеке, то для него придется явно вызвать деструктор


Название: Re: Как вызываются деструкторы
Отправлено: Авварон от Декабрь 15, 2020, 14:52
нет
https://en.cppreference.com/w/cpp/language/storage_duration

Цитировать
static storage duration. The storage for the object is allocated when the program begins and deallocated when the program ends.
Only one instance of the object exists.
All objects declared at namespace scope (including global namespace) have this storage duration, plus those declared with static or extern.
See Non-local variables and Static local variables for details on initialization of objects with this storage duration.


Название: Re: Как вызываются деструкторы
Отправлено: AK от Декабрь 15, 2020, 15:14
То есть все статические объекты: объявленные явно как static, либо объявленные вне функций будут уничтожены с вызовом деструктора при завершении программы? В ссылке про вызов деструктора не написано явно, но видимо, так.


Название: Re: Как вызываются деструкторы
Отправлено: Igors от Декабрь 18, 2020, 07:36
Не вижу примера прямого вызова деструктора. А какой был порыв любознательности, желания все изучить! И сразу потух, и куда все делось?  :)


Название: Re: Как вызываются деструкторы
Отправлено: tux от Декабрь 18, 2020, 11:43
Деструктор вызовется далеко не всегда. Можно просто вставить тот же qDebug в саму функцию деструктора и поиграться.


Название: Re: Как вызываются деструкторы
Отправлено: RedDog от Декабрь 18, 2020, 13:52
Деструктор вызовется далеко не всегда. Можно просто вставить тот же qDebug в саму функцию деструктора и поиграться.
Вот плавно подходим к первому вопросу собеседования "зачем нужен виртуальный деструктор"  :)


Название: Re: Как вызываются деструкторы
Отправлено: Igors от Декабрь 19, 2020, 09:52
Деструктор вызовется далеко не всегда.
Цитировать
Косинус.. ну он не всегда < 1. Может быть и равен 2. В войну до 5 доходил - и ничего, работали


Название: Re: Как вызываются деструкторы
Отправлено: juvf от Январь 13, 2021, 12:13
Уважаемые специалисты, я, увы, новичок в C++ и Qt вопрос, как следует вызывать деструкторы
1. Правильно ли я понимаю, что динамически-созданные объекты классов, наследующих QObject, всегда уничтожаются Qt автоматически? Т.е. явно вызывать "delete S;" после  "QString S; S = new QString("Abc");..." не нужно?
2. Если я создаю статически, скажем "QString S = "Abc";"  как поле класса, то должен в деструкторе класса обязательно написать "S.~QString();" ?
3. Если я объявил "QString S = "Abc";", как локальную переменную метода, то деструктор можно не вызывать, так как объект S будет размещен в стеке и память выделенная S будет освобождена после завершения выполнения метода?
4. Во всех примерах создания оконных приложений:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow winMain;
    winMain.show();
    return app.exec();
}

Объект MainWindow создается статически, получается, его деструктор не будет вызван никогда?
Тогда если полями MainWindow у меня являются динамические массивы, то единственная возможность их удались перед завершением работы приложения - написать слот для сигнала  aboutToQuit() QApplication?

1) Конструктор и деструктор в с++ никогда не вызывается явным видом. Забудьте про всякие S.~QString();. Конструктор и деструктор (а также копирующий конструктор) вызываются автоматически при создании и удалении объекта. Это по мойму азбука с++ (да и вообще ооп).
2) Если вы разбераетесь в программировании, например знаете СИ, и хотите освоить С++ (и ООП) - читайте книгу "Философия с++" Брюс Эккель. Самая лучшая книга по освоению с++/ооп. Описано доступным языком, с примерами и задачами для закрепления знаний. Там и поиграетесь qDebug-ом в деструкторах/конструктора и поймёте что, когда и как вызывается. Пока не прочитаете, так и будете плавать в понятиях конструктор/деструктор/стек/куча/статически....


Название: Re: Как вызываются деструкторы
Отправлено: AK от Январь 20, 2021, 07:28
Спасибо большое, буду читать Эккеля!  Пока подобрал себе Дейтел "Как программировать на C++", изучаю! 


Название: Re: Как вызываются деструкторы
Отправлено: AK от Январь 20, 2021, 07:32
Не вижу примера прямого вызова деструктора. А какой был порыв любознательности, желания все изучить! И сразу потух, и куда все делось?  :)
Igors, спасибо за заботу! Удрученный собственным невежеством и обрадованный небольшим его уменьшением удалился изучать матчасть :) Вон народ книжек посоветовал, изучаю. Пока на вашу задачку не знаю ответа


Название: Re: Как вызываются деструкторы
Отправлено: Racheengel от Январь 20, 2021, 13:42
1) Конструктор и деструктор в с++ никогда не вызывается явным видом. Забудьте про всякие S.~QString();. Конструктор и деструктор (а также копирующий конструктор) вызываются автоматически при создании и удалении объекта. Это по мойму азбука с++ (да и вообще ооп).

Вот не надо так человека в заблуждение вводить по поводу конструкторов :)

Любой вызов типа X* x = new X(QObject* parent) вызывает в первую очередь непосредственно конструктор X::X(QObject* parent).
И только те, которые не указаны прямо после X::X(): будут вызваны неявно "по цепочке" в очерёдности наследования.

А если при создании Х не указаны параметры, то вызовется конструктор по умолчанию (который обычно создаётся компилятором автоматически, если не указан явно).


Название: Re: Как вызываются деструкторы
Отправлено: Igors от Январь 20, 2021, 16:50
..удалился изучать матчасть :) Вон народ книжек посоветовал, изучаю.
Да фигня все это чтение :) Не, ну я иногда делаю (слабые) попытки, но .. Во-первых продравшись через обильное предисловие и кучу благодарностей - я уже устал и растерял добрую половину энтузиазма. Дальше идет то что, в общем, мне известно и чем я и так занимаюсь весь день. Конечно, автор знает это лучше меня, возможно и есть  чему у него поучиться, но разрывать "жемчужные зерна" в этой куче - это невыносимо  :'( Или жуется пример на богомерзкой жабе, что не лучше. Частенько ловлю себя на мыслях типа: "а это чтение имеет какую-то конкретную цель?". "А оно как-то контролируется?". Спросите у любителя "философии" сколько упражнений из книги он выполнил? В общем, достигается в основном самоудовлетворенность типа "я умный потому что я "читал"! Но это не всегда так :)


Название: Re: Как вызываются деструкторы
Отправлено: juvf от Апрель 05, 2021, 10:34
Спросите у любителя "философии" сколько упражнений из книги он выполнил?
Все до одного упражнения. Потом и 2-ой том "прошел". 

Цитировать
Во-первых продравшись через обильное предисловие и кучу благодарностей - я уже устал и растерял добрую половину энтузиазма.
не интересно, так не читайте это. я титры фильма тоже не читаю.

Цитировать
Дальше идет то что, в общем, мне известно и чем я и так занимаюсь весь день.
Так зачем она вам? Повторюсь специально для Вас

Цитировать
2) Если вы разберетесь в программировании, например знаете СИ, и хотите освоить С++ (и ООП) - читайте книгу "Философия с++" Брюс Эккель.
Ключевое слово - хотите освоить. Если Вы закончили школу/вуз уже освоили с++, то учить счет от 1 до 10 и 2*2 Вам будет неинтересно и бесполезно  то изучать определение конструктора Вам будет неинтересно и бесполезно.
Эта книга книга дает именно тот недостающий (и для кого-то тяжелый) шаг чтобы перейти от си к с++ и к опп. Если Вы этот шаг сделали - то удачи Вам в проф.деятельности.

Цитировать
Любой вызов типа X* x = new X(QObject* parent) вызывает в первую очередь непосредственно конструктор X::X(QObject* parent).
Где тут явный вызов конструктора?
Например есть определение метода QDir QDir::current(). Его можно в коде вызвать явно
QDir dir = QDir::current(); //вот это я называю явным вызовом.
 
X* x = new X(QObject* parent); - где тут явная запись X::X(... )? Такой код даже не соберётся.
вот такой соберётся:
QObject* parent;
X* x = new X(parent);
Создается переменная x в куче типа Х с аргументом QObject *parent.  Вывозится соответствующий конструктор, хотя ни какого явного вызова типа Х::Х(...) нет. Причем, конструктор может быть объявлен, например так
X::X(QObject* parent, QObject* child = 0, int base = 10);
Упс.... вызывали "явно"  new X(QObject* parent), а вызвался X::X(QObject* parent, QObject* child, int base);


Название: Re: Как вызываются деструкторы
Отправлено: Igors от Апрель 05, 2021, 10:51
Если Вы закончили школу/вуз уже освоили с++,
Вуз закончил задолго до рождения С++, наверно поэтому еще не освоил  :)

QDir dir = QDir::current(); //вот это я называю явным вызовом.
Может "философия" и ничего, но во всяком случае Вы делаете ей анти-рекламу  :)


Название: Re: Как вызываются деструкторы
Отправлено: Old от Апрель 05, 2021, 11:02
Вуз закончил задолго до рождения С++, наверно поэтому еще не освоил  :)
С++ появился в 1983 году. Задолго до... это какой 1973? Вы 1950 года рождения? Или просто свистанул для пафоса? :)


Название: Re: Как вызываются деструкторы
Отправлено: juvf от Апрель 05, 2021, 12:07
Вуз закончил задолго до рождения С++, наверно поэтому еще не освоил  :)
какая взаимосвязь между ВУЗ-ом и с++? Учитесь читать не читайте перечеркнутый текст. Его для того и перечеркнули, что бы не читать. .... эх..... если вы отделить зачеркнутое от не зачеркнутого не можете, то специально для вас перефразирую...
Цитировать
Если Вы закончили школу/вуз уже освоили с++, то учить счет от 1 до 10 и 2*2 Вам будет неинтересно и бесполезно  то изучать определение конструктора Вам будет неинтересно и бесполезно.
Если Вы научились считать и умножать, то учить счет от 1 до 10 Вам будет неинтересно и бесполезно, ровно как и если Вы уже освоили с++, то изучать определение конструктора Вам будет неинтересно и бесполезно.

ps не читайте зачеркнутый текст


Название: Re: Как вызываются деструкторы
Отправлено: sergek от Апрель 05, 2021, 12:10
С++ появился в 1983 году. Задолго до... это какой 1973? Вы 1950 года рождения? Или просто свистанул для пафоса? :)
Хм... 1983 - в лучшем случае, это EC-1022/24, PL и Фортран. До первых персоналок с Quick C, Borland Turbo Pascal и C еще столько лет... Может, и не свистит?  ;)


Название: Re: Как вызываются деструкторы
Отправлено: Igors от Апрель 05, 2021, 13:02
Хм... 1983 - в лучшем случае, это EC-1022/24, PL и Фортран. До первых персоналок с Quick C, Borland Turbo Pascal и C еще столько лет... Может, и не свистит?  ;)
Все так, сначала работал на 1022, потом на 1052 "по центру", любил эту машину.

С образованием совсем хреново. Тогда считалось что программирование - дело чисто женское, а мужик должен бегать с паяльником. Курс программирования назывался  АЯИП и никаким авторитетом не пользовался. Один раз лектор пришел с яйцами (лотком). Почему-то это задело. Пичкали транзисторами, их я всегда тихо ненавидел. Ну тогда это тоже была "современная технология"


Название: Re: Как вызываются деструкторы
Отправлено: Old от Апрель 05, 2021, 13:22
Хм... 1983 - в лучшем случае, это EC-1022/24, PL и Фортран. До первых персоналок с Quick C, Borland Turbo Pascal и C еще столько лет... Может, и не свистит?  ;)
Ну так это называется "Вуз закончил задолго до того как познакомился с C++", а не "Вуз закончил задолго до рождения С++". :)


Название: Re: Как вызываются деструкторы
Отправлено: Racheengel от Апрель 15, 2021, 12:59
Ну так это называется "Вуз закончил задолго до того как познакомился с C++", а не "Вуз закончил задолго до рождения С++". :)

Когда я учился, плюсы уже появились, только у нас его не преподавали почему-то. Чистый С был, Паскаль и дофига ассемблеров разных.
А транзисторы я тоже ненавидел (как и пол-потока :) )


Название: Re: Как вызываются деструкторы
Отправлено: sergek от Апрель 15, 2021, 17:35
А транзисторы я тоже ненавидел (как и пол-потока :) )
Все-таки пол-потока были правильными студентами ;) Может, это они Эльбрус сейчас делают? Но точно не те, которые из кубиков домики собирают...


Название: Re: Как вызываются деструкторы
Отправлено: Igors от Апрель 17, 2021, 13:09
Когда я учился, плюсы уже появились, только у нас его не преподавали почему-то.
Да, то что в 83-м кто-то там чего-то "объявил" - это всем пофиг (хотя мое утверждение остается верным). Реально начали чухаться где-то в 88-м, тогда стало ясно что система "ВЦ" обречена, и массе людей придется искать новую работу и специальность (в том числе и мне, "электронщику" :)). А в следующие 2 года огромная толпа ломанулась программироввть на clipper (summer-87). Примерно как сейчас на std::, разница лишь в наклейках. Некоторые отчаянно пытались найти какие-то ниши на железках и техобслуживании, но хотя АЦП кормило немало народу - его было намного больше.

А о плюсах услыхали где-то в 90-м, но никаких эмоций это не вызвало, ну есть - да и есть, я продолжал клепать на pascal'е. Хотя наверное в столицах все происходило на годик-другой пораньше


Название: Re: Как вызываются деструкторы
Отправлено: Old от Апрель 17, 2021, 16:38
А в следующие 2 года огромная толпа ломанулась программироввть на clipper (summer-87). Примерно как сейчас на std::, разница лишь в наклейках.
Ну вы хоть в википедии почитайте что такое клипер. :)
Как это можно сравнить со стандартной библиотекой c++? :)
Что-то где-то когда-то слышал... все... на форум рассказывать. :)

А вообще времена тогда были хорошие - деревья выше, трава зеленее. :)
Я в те времена писал на ассемблере и C, и девочки клипающие на клипере бухгалтерскую фигню, смотрели на меня как на бога. :)
Паскаль я знал, но относился к нему как к бейсику. Писал на нем курсовые для моей первой жены, она на мехмате училась.
Эхх, молодость, молодость. :)


Название: Re: Как вызываются деструкторы
Отправлено: Racheengel от Апрель 19, 2021, 18:16
А вообще времена тогда были хорошие - деревья выше, трава зеленее. :)
Я в те времена писал на ассемблере и C, и девочки клипающие на клипере бухгалтерскую фигню, смотрели на меня как на бога. :)
Паскаль я знал, но относился к нему как к бейсику. Писал на нем курсовые для моей первой жены, она на мехмате училась.
Эхх, молодость, молодость. :)

Ага, паскаль, ассемблер, дельфи 6 как раз вышла тогда...
Вот на ней много писал, пока с Qt не познакомился, 3.2 кажись ещё. После этого сразу забил на дельфи :)
И пиво дешёвое тогда было, вот)


Название: Re: Как вызываются деструкторы
Отправлено: Old от Апрель 19, 2021, 21:15
Ага, паскаль, ассемблер, дельфи 6 как раз вышла тогда...
Я сидел на Turbo C, пока не вышел Borland C++ 3.0, тогда я перешел на него.

Вот на ней много писал, пока с Qt не познакомился, 3.2 кажись ещё. После этого сразу забил на дельфи :)
А я с Qt 2 начинал, причем нашел я его случайно, когда искал нормальную графическую оконную библиотеку вместо богом забытого MFC (потому что после TuboVision, это говно использовать было противно. :)
И Qt в этом отношении не разочаровал. Кстати Qt внес значительный вклад в мой переход на linux, как основную платформу. На венде Qt был платным и его приходилось патчить, что бы он не показывал ничего лишнего и работал после 30-дневного периода, а на linux он был свободен. :)


Название: Re: Как вызываются деструкторы
Отправлено: juvf от Апрель 20, 2021, 06:49
Уволился коллега, писавший скаду на QNX4 в Photon. Пришлось осваивать QNX/Photon, а так же с++. Перешли на Qt4+FreeBSD. Внезапно троли продались нокии и нокия выпилила пакет Qt для FreeBSD. Переехали на Linux. Всегда было пара сборок - для рабочих станций *nix, для офиса win. Порадовала кроссплатформиность. Переезд с ос на ос быстрый и лёгкий.

Я тоже с с++ познакомился далеко после вуза. В вузе (специальность не прогер) асм/паскаль, немного си. Те, кто на прогера учился - учили паскаль. Интересно.... как сейчас в вузах дела с прогерами? Какой язык учат? Мне кажется, что с++ в вузах не учат, а его уже после сами учат в процессе проф.деятельности. Учат ли сейчас в вузах Входит ли в полный курс обучения в вузах программирование на с++/std/boost/паттерны/GUI фреймворки? Или может учат java/c#/js/phyton или боже упаси ada?


ps тут прогеры... и может тут подскажут... вот окно этого редактора... пишу текст... есть разные управляющие символы в квадратных скобках.... например текст в таких тагах [_i_] text [/_i_] - указание вьюверу, что слово "text" нужно отобразить наклонным шрифтом. А если мне нужно написать текст "array[j] - массив", но индекс массива не j, а i. То вьювер индекс массива примет за управляющий таг, и после [j] весь текст отобразит наклонным. Каким правильным способом указать вьюверу, что [j] -это не управляющий символ, а текст?


Название: Re: Как вызываются деструкторы
Отправлено: Old от Апрель 20, 2021, 06:57
ps тут прогеры... и может тут подскажут... вот окно этого редактора... пишу текст... есть разные управляющие символы в квадратных скобках.... например текст в таких тагах [_i_] text [/_i_] - указание вьюверу, что слово "text" нужно отобразить наклонным шрифтом. А если мне нужно написать текст "array[j] - массив", но индекс массива не j, а i. То вьювер индекс массива примет за управляющий таг, и после [j] весь текст отобразит наклонным. Каким правильным способом указать вьюверу, что [j] -это не управляющий символ, а текст?

Ну код принято писать в [ code = cpp ]...[ / code ], там не применяются тэги форматирования.


Название: Re: Как вызываются деструкторы
Отправлено: juvf от Апрель 20, 2021, 07:17
Ну код принято писать в [ code = cpp ]...[ / code ], там не применяются тэги форматирования.
Я не хочу писать код.... я кто-то написал код, обрамил его тагом [сode]. Потом, текстом пишу пояснения к коду, текстом, в котором упоминаю "array[j]", потом кто-то что-то ответил.. пошла дискуссия и в этой дискуссии в тексте упоминается "array[j]". Кода нет.
В с/с++ кавычка - это управляющий таг начало и конец текста. printf("hello word"). Но если хочешь вывести текст с кавычками - как быть? На этот счет придумали Это предусмотрели
printf("hello \"word\""). Как в этом редакторе этой разметке подобные вещи предусмотрели?


Название: Re: Как вызываются деструкторы
Отправлено: juvf от Апрель 20, 2021, 11:10
нагуглил.... только эти методы тут не работают. Может тут версия ВВкодов другая?
Админ, подскажи как отменить распознавание BB кодов?


Название: Re: Как вызываются деструкторы
Отправлено: Racheengel от Апрель 20, 2021, 17:27
Я сидел на Turbo C, пока не вышел Borland C++ 3.0, тогда я перешел на него.

Помню, Турбо С, еще лабы на нём на 1 курсе делали...

А я с Qt 2 начинал, причем нашел я его случайно, когда искал нормальную графическую оконную библиотеку вместо богом забытого MFC (потому что после TuboVision, это говно использовать было противно. :)
И Qt в этом отношении не разочаровал. Кстати Qt внес значительный вклад в мой переход на linux, как основную платформу. На венде Qt был платным и его приходилось патчить, что бы он не показывал ничего лишнего и работал после 30-дневного периода, а на linux он был свободен. :)

Да, MFC и TuboVision были настолько убоги, что никакого желания под них писать не было...
А Qt был платным, да, приходилось его хакать) Помню, когда-то самопохаканные сборки на Qt Underground тогдашний выкладывал )))


Название: Re: Как вызываются деструкторы
Отправлено: RedDog от Апрель 20, 2021, 17:37
В те времена Борладн Билдер был силен (тоже хакнутый).


Название: Re: Как вызываются деструкторы
Отправлено: Racheengel от Апрель 20, 2021, 20:22
В те времена Борладн Билдер был силен (тоже хакнутый).

Да он падал постоянно и тормозил как хряк...


Название: Re: Как вызываются деструкторы
Отправлено: RedDog от Апрель 20, 2021, 21:41
Зато сколько кода генеиилось в onButtonClick


Название: Re: Как вызываются деструкторы
Отправлено: Racheengel от Апрель 20, 2021, 22:19
Мне тогда казалось, что Билдер сделали специально, чтобы люди учили паскаль и переходили на Делфи...


Название: Re: Как вызываются деструкторы
Отправлено: sergek от Апрель 21, 2021, 08:42
Мне тогда казалось, что Билдер сделали специально, чтобы люди учили паскаль и переходили на Делфи...
Вы не правы, первым вышел Delphi с паскалем. А Builder C++ с выпуском долго задерживали. И не падал он, как тут утверждают. Я работал на 3.0, 5.0, 6.0 - очень хорошая была среда. И "тормоза" его - только по сравнению с паскалевским компилятором.