Portál AbcLinuxu, 10. května 2025 00:59
ts *ts1 = new ts();
Akurát že toto dáva pointer, ak sa nemýlim. Následne môžem urobiť toto:
ts tsobj1=*ts1;
toto už je samotný objekt (neviem či sa vyjadrujem správne)
Otázka je či je to možné urobiť v jednom kroku. Skušal som tak náhodne rôzne varianty a nikdy to neprešlo :)
Ďakujem
PS: domáca uloha to nie je...
ts tsobj1 = ts();
ts tsobj1;Na halde bych urcite nevytvarel objekt pomoci operatoru new, ale pomoci smart pointeru takto: Do headeru dej:
typedef std::shared_ptr<ts> TsPtr;do kodu:
TsPtr tsptr = std::make_shared(); tsptr->doSomething();
const TsPtr tsptr = std::make_shared();To neznamena, ze objekt za pointrem je konstantni! Konstantni je pouze pointer. Presne: konstantni pointer na nekonstantni objekt. Je dobrym zvykem davat const vsude kde to jde, a az casem pripadne odebirat. Zpetne se const do komplikovaneho kodu spatne pridava...
ts tsobj1;
Veľká vdaka, a vďaka aj ostatným, lebo celý tento thread bol veľmi poučný :)
ts tsobj1 = ts();
Vytvoril jsi temporary object na prave strane, ktery se hned zkopiruje do objektu na leve strane. Temporary objekt nasledne zanikne, protoze na nej nevedou zadne reference. Pokud by kopirovani byla draha operace, tak zbytecne plytvas prostredky. Muzes ale implementovat metodu ts& ts::operator=(const ts& other)
, ktera nebude provadet kopirovani, ale napr. swapnuti.
ts& tsobj1 = ts();
Tak se nebude kopirovat cely temporary objekt z prave strany, ale jen reference na nej. Tim prodlouzis zivot temporary objektu, ktery bude existovat tak dlouho, dokud nepujde tsobj1 out-of-scope.
const ts&
, ale rvalue reference ts&&
. Nicméně podle toho, na co se tazatel ptá, bych se do těchhle optimalizací zatím nepouštěl :)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.