Haha! Nikt nie wie?! :-) To tak jak ja... Programuję już klika ładnych lat w C++ i zacząłem się zastanawiać. I nie mogę znaleźć odpowiedzi... Aczkolwiek on musi istnieć, przestałem już dawno wierzyć w "błedy kompilatora" ;-)
Rozwinę temat, tzn. moje przemyślenia. Rozumiem zastosowanie bardziej zaawansowanych inteligentnych wskaźników, jak te z boost'a - takich np., które możemy kopiować/powielać, a one zliczają odwołania. Ale taki najprostszy auto_ptr<> ? Jedyne w czym widzę sens to zwracanie takiego auto_ptr'a z funkcji, tzn. zwrócenia auto_ptr'a przez wartość. Wtedy tworzymy kopię auto_ptr'a, który jest >>względnie mały<< (nie to co kopiować obiekt klasy MojaKlasa, który może być duuuży). Wtedy faktycznie po tym jak ta kopia auto_ptr'a wyjdzie poza zasięg, to jego destruktor posprząta nasz obiekt stworzony przez new. OK, to ma sens. Ale widziałem miloion razy auto_ptr'a uzytego w taki sposób jak napisałem w poprzednim poście. I nie mogę sobie odpowiedzieć na pytanie jaka jest przewaga na wersją z przekazaniem adresu zmiennej lokalnej. OK, w jednym przypadku obiekt jest tworzony na stercie, a w drugim na stosie, ale to przecież nie ma znaczenia (poza może jakimiś super-wyspecjalizowanymi zastosowaniami). W jednym drugim przypadku obiekt będzie posprzątany po wyjściu poza zakres "widoczności". Więc gdzie popełniam błąd w moim rozumowaniu?
Pozdrawiam,
Michał