vector -- изменение размеров.
От: Fiend  
Дата: 16.09.02 04:56
Оценка:
В моей реализации, при необходимости увеличить размер вектора происходит следующее: аллокатор выделяет новый блок памяти нужного размера, затем в этой области конструктором копий и оператором new размещения создаются копии объектов исходного вектора, потом для объектов исходного вектора выз. деструкторы и старая память освобождается аллокатором. А нельзя ли было обойтись без этого, просто скопировать старый блок при помощи memcpy например и не вызывая деструкторов освободить старую память? В каких случаях этого нельзя делать? А то у меня что-то фантазии не хватает.
Re: vector -- изменение размеров.
От: Андрей Тарасевич Беларусь  
Дата: 16.09.02 05:21
Оценка:
Здравствуйте Fiend, Вы писали:

F>В моей реализации, при необходимости увеличить размер вектора происходит следующее: аллокатор выделяет новый блок памяти нужного размера, затем в этой области конструктором копий и оператором new размещения создаются копии объектов исходного вектора, потом для объектов исходного вектора выз. деструкторы и старая память освобождается аллокатором. А нельзя ли было обойтись без этого, просто скопировать старый блок при помощи memcpy например и не вызывая деструкторов освободить старую память? В каких случаях этого нельзя делать? А то у меня что-то фантазии не хватает.


Официально в С++ такое разрешается делать только для объектов POD типов.

Разумеется, такой способ копирования объектов будет приводит к появлению некорректных объектов в тех случаях, когда объект содержит ссылки на самого себя (указатели или references). Эти ссылки могут быть явными или могуть быть введены неявно реализацией.
Best regards,
Андрей Тарасевич
Re: vector -- изменение размеров.
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 19.09.02 16:41
Оценка:
Здравствуйте Fiend, Вы писали:

F>В моей реализации, при необходимости увеличить размер вектора происходит следующее: аллокатор выделяет новый блок памяти нужного размера, затем в этой области конструктором копий и оператором new размещения создаются копии объектов исходного вектора, потом для объектов исходного вектора выз. деструкторы и старая память освобождается аллокатором. А нельзя ли было обойтись без этого, просто скопировать старый блок при помощи memcpy например и не вызывая деструкторов освободить старую память? В каких случаях этого нельзя делать? А то у меня что-то фантазии не хватает.


посмотри
Автор: Коваленко Дмитрий
Дата: 19.09.02
реализацию t_wrap_vector и производных от него классов. Это в конференции с исходниками.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.