Citat:
En notering här är att om du kör med gammal C++-standard så behöver du tänka på rule-of-three.
Om ditt objekt innehåller data som inte kan korrekt hanteras med kopiering fält-för-fält så behöver du skriva egen kod för detta. Pekare är ett exempel på ett fält som inte klarar vanlig kopiering, för kompilatorn kommer att kopiera pekaren i stället för att förstå att det behövs en minnesallokering och sedan en kopiering av informationen från den ena minnesbufferten till den andra.
Så då behöver du en copy-constructor (som alltså korrekt tar kopia från annat objekt av samma typ direkt vid initiering).
Och du behöver en assignment-operator för att hantera vanlig tilldelning var = other_var;
Och du behöver en destruktor som förstår att frisläppa minnesblocket (och ev rekursivt data i objekt som lagras i minnesblocket).
https://en.wikipedia.org/wiki/Rule_o...2B_programming)
Person behöver inte bry sig, för den har inget attribut av någon typ som inte kan direkt hantera direkt tilldelning.
PersonLista saknar i koden du laddade upp en assignment-operator. Den har copy-constructor och destructor men alltså inte hela trefaldigheten.
Transaktion har assignment-operator och destruktor. Men ingen copy-constructor. Alltså möjlighet till läckage med string* vanner.
TransaktionsLista saknar både tilldelningsoperator och kopierings-konstruktor. Men eftersom ditt program inte behöver kunna kopiera en transaktionslista så skulle du kunna lösa det utan att implementera. Med äldre standard på c++ så kan du lista en assignment operator och en copy-constructor som private och sedan låta bli att implementera. Då kommer kompilatorn åtminstone ge ett kompileringsfel (eller möjligen länkfel) om programmet faktiskt försöker göra en kopia på en transaktionslista.
Edit:
och med färskare C++ behöver du inte gömma assignment operator eller copy constructor i private. Du kan i stället skriva "= delete;" efter deklarationen för att säga att du inte tänker implementera funktionen och att kompilatorn själv absolut inte får default-generera någon åt dig.
__________________
Senast redigerad av cellplast 2019-08-30 kl. 18:41.
Senast redigerad av cellplast 2019-08-30 kl. 18:41.