Dlaczego tak
Kompilator generuje domyślny konstruktor kopiujący, który kopiuje pola składowa po składowej, więc b.dane wskazuje ten sam obszar co a.dane (płytka kopia). Przy wyjściu z main oba destruktory wywołują delete[] na tym samym adresie, co jest niezdefiniowanym zachowaniem i zwykle kończy się awarią. Należy zdefiniować konstruktor kopiujący wykonujący głęboką kopię (zasada trzech). Zapis Bufor b = a wywołuje konstruktor kopiujący, a nie operator przypisania.