Όταν καλείς τον destructor του αντικειμένου (this) κάνεις πολυ περισσοτερα απ'όσα βρίσκονται μέσα στις {...} (υποθέτω διαγράφεις έναν πίνακα), καταστρέφει όλο το αντικείμενο, που σημαίνει ότι ο χώρος πλέον είναι αδέσμευτος. Οπότε πρέπει να δημιουργήσεις εκ νέου το ίδιο το αντικείμενο.
Πρακτικά θες κάτι τέτοιo:
const stack& operator=(const stack& s) {
this->~stack();
new(this) stack(s);
return *this;
}
H τεχνική σου μάλλον δεν είναι και τόσο DRY αφου πρέπει να ξαναφτιάξεις 1 με 2 αντικείμενα