> U naprosté většiny objektů nepotřebuju řešit, zda bude sdílen či ne, kdy skončí životnost apod.
Keď niečo neriešiš osobne, tak to za teba vyrieši niekto iný a je otázka, či ti to tak vyhovuje. Mne nie.
> Dále, ať už je objekt takový či makový, nemá to vliv na hlavičku funkce, do které ho chci poslat.
To aký je objekt nie, to ani nikto netvrdí. Vlastníctvo a pod. neriešime kvôli samotnému objektu, ale kvôli tomu, ako s ním pracujeme. Vo funkciách. Riešime, či je objekt vo funkcii vytvorený a vrátený volajúcemu, alebo či z prijatého objektu vo funkcii iba čítame alebo ho aj modifikujeme alebo objekt kompletne nahradíme iným objektom, alebo či ten objekt vo funkcii končí svoju životnosť, v iných prípadoch je naopak rozumné zabezpečiť, aby objekt počas volania funkcie nezanikol, atď. (Nepochybujem, že toto vieš aj sám.) A podľa toho akú požadujeme funkčnosť volíme argumenty funkcií.
> To že v C++ musím dělat tato rozhodnutí pro každou jednotlivou instanci a každý jednotlivý parametr
Stále si myslím, že to naozaj nemusíš. Môžeš sa správať na základe štandardných odporúčaní, teda opakovať stále jedno počiatočné rozhodnutie pre daný kontext, a v odôvodnených prípadoch sa môžeš rozhodnúť pre niečo iné. Keď vieš, že za to získaš niečo, čo potrebuješ.
> jenže založit objekt je v C++ výrazně dražší než třeba v JVM
S JVM nepracujem, tak neviem ako to myslíš, ale keď chcem, aby som mal v C++ objekt vytvorený rýchlo, čo sa týka objektov, ktorých mám v aplikácii kvantum, tak si odhadnem koľko ich asi budem mať, predalokujem pamäť pre všetky naraz (zjednodušene povedané), vytvorím vlastný "alokátor" a vytvárané objekty budú existovať v rámci predalokovanej pamäťovej oblasti. Keď chcem, tak tú oblasť môžem mať inicializovanú blokom objektov načítaných z disku, alebo iba namapovanú zo súboru, na základie služieb OS. Takže vo finále vytvorenie jedného objektu je vlastne práca s ukazovateľom a s nejakou internou dátovou štruktúrou, v ktorej je evidencia voľných a obsadených blokov (zoznam, strom, bitová mapa, čokoľvek iné), prípadne ešte inicializácia jednotlivých členských premenných vytváraného objektu, pokiaľ ich naozaj vytváram a neboli načítané alebo namapované. Uvoľnenie jednotlivej položky je ešte jednoduchšie a uvoľnenie celého bloku ani nemusím písať. Fragmentácia nula. JVM má nejakú rýchlejšiu/lacnejšiu metódu?
> ... že toho programátor v C++ bude muset řešit víc než je nutné jinde.
Naozaj zďaleka nie vždy a pokiaľ za to dostane niečo, čo inde nie, tak v tom nevidím problém.
> To samozřejmě fungovat nebude, stačí mít mezi objekty cyklus
Nechápem.. Myslíš cyklus ako for, while, atď? Tu neviem, čo napísať, už dávno používam štandardné algoritmy.
Alebo myslíš dva objekty, ktoré na seba vzájomne držia ukazovateľ? O tom sa ale nebavíme, reagoval som na zmienku o argumentoch funkcií. A pokiaľ nechceš, aby sa inkrementoval počet, tak ten zdieľaný ukazovateľ odovzdáš odkazom.
Alebo môžeš do funkcií posielať holý ukazovateľ. Aj tak nechceš riešiť vlastníctvo, tak je to jedno, nie? :)
> Anebo můžu použít platformu, která 95% těch situací vyřeší sama
To samozrejme môžeš, ale vtedy asi nespadáš pod definíciu poslednej vety môjho komentára, pretože tam spadá tých "5%" vecí, ktoré sa samé nevyriešia.
Vo finále nechápem o čom sa bavíme, možno iba nepatríš medzi tých, ktorí vlastnosti C++ potrebujú. Ale to je úplne v poriadku.