Na tomhle serveru se pravidelně projevuje několik odborníků na jazyky a konkrétně C++. Já sám jsem hobbík a nedouk, dělám spíš do včel. A možná právě proto jsem na té správné úrovni, abych tady trochu něco okomentoval, ze své nevysoké pozorovatelny.
Takže po tomto disclaimeru ještě k bodům 2 a 3:
2.) jasně, návratovou hodnotou Vaší metody je vector, předávaný hodnotou. Inu proč ne :-) C++ to umí.
Osobně když tohle vidím, mám přirozený sklon říct "fuj, tohle se mělo předat odkazem". Ale ono ve skutečnosti záleží na situaci. V mnoha případech si řekněte "a zrovna ne, vždyť bych to o kus dál stejně musel kopírovat, a to nějak složitěji ručně/oklikou". A i kdyby to bylo trochu neefektivní... tak co? Záleží, jestli ta neefektivita něčemu vadí. Jestli si pomůžete v rovině "uživatelského dojmu", když místo předávky hodnotou předáte jenom referenci. Nebo napak v dané situaci (nějaký objektový model) je z hlediska fungování aplikace správně, předat odkaz, tzn. nikoli provádět hloubkovou kopii nějaké hierarchie instancí.
V obecnější rovině: C++ jakožto následník C má v genech takovou obecnou snahu, zamezit klasickým céčkovým nešvarům jako je opomenutí dealokace již nepotřebného objektu, nebo dereference pointeru na již dealokovaný objekt (nebo null pointeru) nebo opomenutí alokovaný objekt inicializovat na počáteční smysluplný stav apod. A snahou správců jazyka C++ vždy bylo, nabídnout základní primitiva a "programovací přístupy", která/které budou podobným situacím principielně předcházet. To že se do kontejnerů typu "vector" vkládají nejradši hodnoty (spíš než pointery nebo reference), to je přesně projev těchto snah. Nevím jestli má zásada "předávat hodnotou, nikoli odkazem" sama nějaké jméno, každopádně sousedí se zásadou RAII (
1,
2). Totiž pokud používáte objekty, které se RAII drží, a předáváte si je hodnotou, tak máte v C++ prakticky po starostech s "vlastnictvím", životním cyklem instance, automatickou alokací a dealokací.
Odkud to C++ vlastně studujete? Máte nějakou představu o Céčku, umíte používat jeho pointery, nabil jste si o ně párkrát nos? Nebo znáte klasickou práci s "dynamickými daty" a ukazateli v nějakém jiném jazyce téhle generace? (Packal?) Už jste narazil na C++ reference a jejich rozdíl oproti klasickým pointerům? (C++ Reference jsou další taková finta, jak sice nepředávat hodnotou, ale zároveň se za každou cenu vyhnout situaci, kdy reference bude naplatná.) A potkáte strong pointery... a já osobně (neživím se tím) teď jak trochu dohledávám další čtení okolo, narazil jsem na
dvě povídání, ze kterých mi jdou oči trochu křížem... Prostě jsem spíš nenapravitelný céčkař.
Osobně jsem i jako hobbík už tu a tam napsal nějaký kus softwaru, kde trochu rozsáhlejší datový model znemožňoval, používat prosté předávání hodnotou. Zkrátka to nedávalo smysl. Objekty na heapu byly pěkně navzájem prolinkované odkazy (často nakonec prostými pointery, nebo strong pointery) a předávání hodnotou by bylo koncepčně blbě, protože by tím vznikla pokaždé další nová instance objektu, nová kopie.
Čili osobně si z toho beru tolik, že ty syntaktické nástroje, jak si "samotížně" zajistit RAII a vyhnout se mrtvým pointerům, jsou dobré na úplně spodní vrstvu, úplně nejdrobnější součástky, ze kterých stavíte svou katedrálu. Na trochu vyšších vrstvách skladebnosti už si musíte sám nést odpovědnost za "vlastnictví" objektů a jejich životní cyklus. C++ Vám k tomu bude maximálně nápomocno - takže se můžete soustředit na těch několik momentů, kdy objekt přechází např. ze stavu "základní prázdný zhruba inicializovaný" do "plně zabydlený" do "připojený a aktivní" apod., můžete se soustředit na správný moment, kdy (a v jakém pořadí) má instance objektu automaticky dealokovat vlastněné objekty (při graceful shutdownu), držené přes nějaký kontejner pointerů apod. Došel jsem zhruba k intruzivním šablonám pro autodestrukci na bázi reference countingu... (v kombinaci se strong pointers). A jsem si vědom, že to je pořád velice "lopatí" úroveň programovací černé magie.
3.) konvence tvorby jmen... osobně vím cca o dvou rozšířených variantách:
A) to co je vidět v Linuxu = všechna písmenka malá a mezi slovy podtržítka
B) "maďarská notace", dost rozšířená v Microsoftím světě
C) občas je k vidění varianta "maximálně úsporná" = jména symbolů jsou 2-4 znaky dlouhé zkratky :-) Viz třeba zdrojáky Perlu.
Ona je to zřejmě podmnožina širšího "coding style". Obecně když přispíváte do nějakého projektu, měl byste se držet stávajícího stylu - vč. věcí jako kde dávat otvírací závorku bloku, kolik pevných mezer odpovídá tabulátoru apod.
Pokud začínáte na zelené louce svůj vlastní kousek softwaru, možná zvažte, ze kterého tábora bude převažující "odborné publikum".