Venujem sa nejaké 2 týždne C++ ale stále v ňom tápem. Dlho som programoval vo vyšších jazykoch.
C++ mi dáva veľa slobody veľa možností ako niečo spraviť a práve v tom je ten problém.
1. Už len taká alokácia premenných (idem to porovnať s vyššími jazykmi):
C# - sa "primitívne" základné typy (int, float, int64, bool) vytvárajú na stacku. Objekty sú vytvárané na halde. Štruktúry na stacku. Všetko čo sa vytvára na stacku je hodnotové. Všetko čo sa vytvára na halde je referenčné (upozornenie: refrencie v C# je niečo iné ako referencie v C++). čo sa týka stringov tie sa vytvárajú (aj tam aj tam) podľa kontextu.
C++ sa dá hocičo vytvoriť hocikde. No a teraz babo raď kde mám čo vytvoriť?
Mám to robiť rovnako ako v C#? Že objekty budem vytvárať primárne na halde? A budem k ním pristupovať cez pointery (resp smart pointery aby sa nemuselo riešiť uvolňovanie pamate)? A len vo výnimočných prípadoch ich vytvorím na stacku (keď to budú vyžadovať okolnosti)? Alebo mám naopak preferovať vytváranie na stacku? Viem že OOP na stacku je obmedzené nefungujú tam virtuálne metódy.
Ale mňa zaujíma hlavne to čo je efektívnejšie a čo sa ako bežne používa. Keď si pozriem nejaké príklady tak sa používajú obidva spôsoby rovnako veľa. Podľa akého kľúća si mám teda vyberať medzi stackom a haldou.
2. stringy
C# - string je objekt ale správa sa ako keby to bol primitívny typ (je immutable a má preťažený operátor = takže sa vždy kopíruje jeho hodnota). Človek vôbec nerieši kde ten string vytvorí.
C++ std::string / std::wstring - je tiež objekt ale môžem si ho vytvoriť kde chem, kde mám preferovať jeho vytváranie na stacku či na halde? aké výhody prináša jedna aj druhá vraianta?
3. to isté platí pre kontainery ako vector či map - stack alebo halda?
4. polia? - stack alebo halda?
5. a čo ak chcem mať anemický objekt (kôli jednoduchšej serializácii?) ten asi treba celý vytvoriť na stacku.
viete mi povedať podľa čoho sa mám rozhodovať?
6. Ešte sa opýtam an GUI. Aký GUI toolkit preferujete? pre C++? Qt?
Na záver ešte poviem že C++ sa mi veľmi páči konečne jazyk ktorý si ide svojou cestou a nekopíruje ostatné jazyky. Programujem už veľmi dlho od základnej školy (desiatky rokov) ale C++ je pod dlhej dobe prvý jazyk ktorý ma dokáže stale znovu a znovu prekvapiť. Vačšina imperatívnych jazykov sú všetky na jedno kopyto.