C++ 3d.Комментарии


Неинициализированная память


template<class T, class A> T* temporary_dup(vector<T,A>& v) { T* p=get_temporary_buffer<T>(v.size()).first; if (p==0) return 0; copy(v.begin(),v.end(),raw_storage_iterator<T*,T>(p)); return p; }

Вообще говоря, приведенная функция написана некорректно, т.к. не проверяется второй элемент возвращаемой get_temporary_buffer<>() пары. Т.к. get_temporary_buffer<>() может вернуть меньше памяти, чем мы запросили, то необходима другая проверка: template<class T, class A> T* temporary_dup(vector<T,A>& v) { pair<T*,ptrdiff_t> p(get_temporary_buffer<T>(v.size()));

if (p.second<v.size()) { if (p.first) return_temporary_buffer(p.first); return 0; }

copy(v.begin(),v.end(),raw_storage_iterator<T*,T>(p)); return p.first; }




Начало  Назад  Вперед