User Tools

Site Tools


cpp:copy_constructors

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next revision
cpp:copy_constructors [2017/05/10 06:14] – [Ορισμός ενός κατασκευαστή αντιγραφέα] gthanoscpp:copy_constructors [2017/05/10 06:58] – [Δημιουργία κατασκευαστών αντιγραφέων] gthanos
Line 205: Line 205:
   p->setX(p->getX() + dx);   p->setX(p->getX() + dx);
   p->setY(p->getY() + dy);   p->setY(p->getY() + dy);
 +}
 +
 +void print(Rectangle r) {
 +  cout << "[" << r.getOrigin().getX() << "," << r.getOrigin().getY() << "] ";
 +  cout << "width: " << r.getWidth() << ", height: " << getHeight() << endl;
 } }
  
Line 213: Line 218:
      
   moveOrigin(r1, 1,-1);   moveOrigin(r1, 1,-1);
 +  moveOrigin(r2, 2, 0);
 } }
 </code> </code>
  
-Ο παραπάνω κώδικας αντιγράφει στο αντικείμενο //r2// τα πεδία του αντικειμένου //r1// πεδίο προς πεδίο. Αυτό σημαίνει ότι τα αντικείμενα //r1// και //r2// μοιράζονται το ίδιο αντικείμενο τύπου //Point//. Εάν μεταβληθούν οι συντεταγμένες του //Point// από το αντικείμενο //r1//, η μεταβολή θα ισχύει και για το αντικείμενο //r2//Εάν θέλετε να αποφύγετε αυτή τη συμπεριφορά θα πρέπει να ορίσετε τον δικό σας κατασκευαστή αντιγραφέα που κάνει τα εξής:+Ο παραπάνω κώδικας αντιγράφει στο αντικείμενο //r2// τα πεδία του αντικειμένου //r1// πεδίο προς πεδίο. Αυτό σημαίνει ότι τα αντικείμενα //r1// και //r2// μοιράζονται το ίδιο αντικείμενο τύπου //Point//. Εάν μεταβληθούν οι συντεταγμένες του //Point// από το αντικείμενο //r1//, η μεταβολή θα ισχύει και για το αντικείμενο //r2//Μετά την ολοκλήρωση κλήσης της πρώτης moveOrigin το αντίγραφο του αντικειμένου r1 θα καταστραφεί ελευθερώνοντας τη δεσμευμένη μνήμη για το πεδίο origin. Η αμέσως επόμενη κλήση της moveOrigin Θα παράγει segmentation fault. 
 +Για να αποφύγετε την παραπάνω συμπεριφορά θα πρέπει να ορίσετε τον δικό σας κατασκευαστή αντιγραφέα που κάνει τα εξής:
   - Δημιουργεί ένα νέο αντικείμενο τύπου //Point//.   - Δημιουργεί ένα νέο αντικείμενο τύπου //Point//.
   - Αντιγράφει τα περιεχόμενα του παλιού στο νέο.   - Αντιγράφει τα περιεχόμενα του παλιού στο νέο.
cpp/copy_constructors.txt · Last modified: 2022/05/12 19:41 by gthanos