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?
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?
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()) { }
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.