1
Vývoj / Re:Qt - potomkovia QObject a auto
« kdy: 23. 10. 2021, 20:26:57 »Ahojte, začal som sa venovať vývoju pre Unix a KDE. Chcel by som spraviť nejaké Qt GUI utilitky / aplikácie pre veci špecifické pre FreeBSD a Solaris. Lenže Qt si jazyk C++ troška ohýba, tak že sú tam mierne odlišnosti oproti bežnému C++. Celkový dojem z toho mám akoby som kódil v jazyku C# alebo Jave, ale zase daktoré veci mi prídu dosť archaické nepoužíva sa tam v takej miere preťažovanie operátorov, namiesto smart pointerov vidím vo vygenerovanom kóde z QtDesigneru natívne pointery a operátor new atď.
No a zarazila ma jedna vec:
Objekty podedené od QObject musím inštanciovať po starom (z ľava do prava):Kód: [Vybrat]QObject instance;
Ale keď to inštanciujem takto:Kód: [Vybrat]auto instance = QObject();
Tak mi to vyhodí takúto chybu:
http://pluton.cloud/attachment/8f4d3a81-5d3e-4403-bc3b-899b56f55579/issue.png
Prečo?
Evidentně kompilátor bere
Kód: [Vybrat]
auto instance = QObject();
jako copy initialization a chce použít copy constructor, který je ovšem v qobject.h na řádku 467 definovaný jako deleted. Naopak:Kód: [Vybrat]
QObject instance;
je default initialization (https://en.cppreference.com/w/cpp/language/default_initialization), při které se copy constructor neuvažuje. Nicméně v C++17 už je to jinak a myslím, že tam už by se zkompilovala i první varianta.