1. Jestli na stacku nebo v heapu je vetsinou zalezitost nekolika veci:
- znas velikost predem?
- neni to moc velke aby se to veslo do stacku (podle systemu ma vetsinou jen par MB, takze obrovske pole na stacku proste neprojde)
- je to nejaky chytry objekt (takovy se vytvari prave na stacku, aby se pri skonceni platnosti zavolal destruktor)
- jestli se ma pak objekt jeste nekam dal predavat
1. + 2. + 3. Je taky dobre vedet, ze naprosta vetsina kontejneru jako (vector, jeho varianta string, ...) si pamet osefuji sami, takze stejne ty data skonci na heapu, ikdyz je string lokalni promenna (na stacku). Ruzne implementace muzou mit i vylepseni, jako ze pokud je string alespon o 1 kratsi nez je velikost pointeru, tak ulozi data primo v sobe.
Takze prakticky neni potreba vytvaret je na heapu. Hlavne se pote samy uvolni destruktorem (samozrejme, pokud v nich mas raw pointery, tak o nich to uz neplati, jedine, pokud tam bude nejaky smart wrapper, ktery by se o to postaral)
Virtualni metody na stacku nefungujou, protoze je pevne dane, ze je to konkretni typ. Nemuzes tam nikdy nacpat nic jinyho. Nicmene muzes vytvorit referenci (ci ziskat pointer) a ten pak predavat i referenci na nadrazene tridy (jeho parenty). Tj. Child obj; Parent & reference = obj; a nad "reference" uz polymorfizmus fungovat bude. To se nejvice pouziva pri predavani parametru pomoci rozhrani (interface)
4. pole na stacku (pokud se tedy do nej vejdou a vubec jestli znas velikost)
5. Jedine ciste C struktury - a jen POD polozky (plain old data - tj. nic z C++), ale nedoporucuju. Kazdej prekladac a i jeho varianty si to zarovnaj v pameti jak se jim zlibi a tak. Kazdopadne ta struktura nemusi byt nutne na stacku, musi byt akorat v pameti na jednom miste
6. Ja osobne mam rad automatizaci a tak, takze spis textove, neinteraktivni a ovladani scriptama. V praci se treba na 3D grafiku pouziva openFrameworks (ale je to dost patlanina, samej navrhovej antipattern) a hlavne tam neni poradne nic na normalni okynka a formulare.
Jinak vetsina jazyku v nejakem smyslu kopiruje C ci C++ (C je mimochodem hodne starej jazyk) a C++ vzniklo puvodne jako nadstavba C a pote se z nej stal samostatny jazyk. Urcite je lepsi nemichat C do C++ programu (pokud to jde, coz vetsinou ano)