Advertisement
Guest User

Untitled

a guest
Jun 19th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1.     // PROJDE, ale je to pomalé, volá se copy constructor na objecktu
  2.     MyClass GetMyClassValue()
  3.     {
  4.         // tvorba objektu na zásobníku, po opuštění
  5.         // funkce se položka ze zásobníku ruší
  6.         MyClass result;
  7.  
  8.         // vrací se kopie lokálního objektu result
  9.         return result;
  10.     }
  11.  
  12.     // ŠPATNĚ, protože lokální položka MyClass je zdestruována, vrací se reference na neexistující objekt
  13.     MyClass& GetMyClassReferenceWrong()
  14.     {  
  15.         // tvorba objektu na zásobníku, po opuštění
  16.         // funkce se položka ze zásobníku ruší
  17.         MyClass result;
  18.         return result;
  19.     }
  20.  
  21.     // DOBŘE, nutno pak zajistit destruování paměti ručně
  22.     // V tomto případě to ale asi trochu svádí zapomenout na destruování objektu
  23.     // (nutno získat zpět pointer na získaný objekt a zavolat delete)
  24.     MyClass& GetMyClassReference()
  25.     {
  26.         // tvorba na haldě, musíme se sami postarat o zrušení
  27.         MyClass *result = new MyClass;
  28.  
  29.         // lokální proměnná result sice zaniká, ale z funkce se vrátí kopie
  30.         // reference na objekt
  31.         return *result;
  32.     }
  33.  
  34.     // DOBŘE, nutno pak zajistit destruování paměti ručně
  35.     // získám pointer, na něm pak delete
  36.     MyClass* GetMyClassPointer()
  37.     {
  38.         // tvorba na haldě, musíme se sami postarat o zrušení
  39.         MyClass *result = new MyClass; 
  40.         return result;
  41.     }
  42.  
  43.     // DOBŘE, nutno pak zajistit destruování paměti ručně
  44.     // nutno zde mít ještě referenci (&) - abychom nám byl předán pointer, který
  45.     // má být naplněn a ne jeho kopie vykopírovaná do parametru
  46.     void GetMyClassFillPointer(MyClass*& pointer)
  47.     {
  48.         // tvorba na haldě, musíme se sami postarat o zrušení
  49.         pointer = new MyClass();        
  50.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement