Εργαστήριο Τεχνολογίας Λογισμικού
0 votes
220 views

Ξέρω ότι δε ειναι καλό να καλούμε τον deconstructor, αλλα για να ακολουθήσω όσο πιο πιστά μπορούσα το DRY (don't repeat yourself) εγραψα αυτο:

const stack<T> &operator=(const stack<T> &s)
{
  this->~stack(); // works, deletes heap memory

  *this = stack(s); // segfault in stack constructor

  return *this;
}

Γίνεται να αναθέσω κάτι στο this? Αν ναι πώς?

in progtech by (750 points) | 220 views
0

Για να αναθεσεις στο this δεν πρεπει να εχει προηγηθει το overloading του = (και οχι μεσα σε αυτο) αφου ειναι δεικτης σε αντικειμενο;

1 Answer

+1 vote
Best answer

Όταν καλείς τον destructor του αντικειμένου (this) κάνεις πολυ περισσοτερα απ'όσα βρίσκονται μέσα στις {...} (υποθέτω διαγράφεις έναν πίνακα), καταστρέφει όλο το αντικείμενο, που σημαίνει ότι ο χώρος πλέον είναι αδέσμευτος. Οπότε πρέπει να δημιουργήσεις εκ νέου το ίδιο το αντικείμενο.

Πρακτικά θες κάτι τέτοιo:

const stack& operator=(const stack& s) {
  this->~stack();
  new(this) stack(s);
  return *this;
}

H τεχνική σου μάλλον δεν είναι και τόσο DRY αφου πρέπει να ξαναφτιάξεις 1 με 2 αντικείμενα

by (610 points)
selected by

301 questions

289 answers

288 comments

903 users