auto_ptr inteligentny wskaźnik

0

Hejka.
Czy taki kod jest poprawny?

auto_ptr<int> a = auto_ptr<int>(new int);

Czy obiekt utworzony przez auto_ptr<int>(new int); nie zostanie usunięty po wyjściu z tej linijki?

0

Jeżeli pytasz czy nie okaże się, że po tej linijce a będzie zawierać "dangling pointer" to nie, nie będzie tak. To znaczy, po skopiowaniu wartości wskaźnika z tymczasowego obiektu tenże tymczasowy auto_ptr zostanie zniszczony, ale nie zwolni on wskaźnika bo już nie jest jego właścicielem. Jest nim a.
Spójrz na źródło:

      /**
       *  @brief  An %auto_ptr can be constructed from another %auto_ptr.
       *  @param  a  Another %auto_ptr of the same type.
       *
       *  This object now @e owns the object previously owned by @a a,
       *  which has given up ownership.
       */
      auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }
1

lepiej jednak napisać

auto_ptr<int> a(new int);

bo po co ma się wykonywać pusty kod (który co prawda optymalizator pewnie i tak wyrzuci, ale to nigdy nic pewnego)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.