![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Доброго времени суток.
Есть шаблонный объект, который является оберткой типа массива, со своим менеджментом памяти. В нем есть такой код отвечающий за выделения памяти.
Есть сомнение в правильности работы realloc(). Так как при хранении некоторых типов объектов, при вызове realloc() происходит глюк. Вопрос: На сколько правильно использование realloc() совместно с new? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
Gradov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 31.10.2006 Репутация: нет Всего: 3 |
Никогда не экспериментировал в использовании new совместно с malloc,realloc для работы с одним и тем же участком памяти. И мне кажется ничего хорошего из этого не выйдет!
![]() Либо malloc, realloc, либо new. Это сообщение отредактировал(а) Gradov - 25.3.2009, 11:33 |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Предложите свои варианты реализации сей функции.
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
здесь вызывается конструктор type()
здесь - нет. потому и глюк. но это в слабом предположении, что new/delete реализованы через malloc/free а вообще-то по стандарту куча и свободная память - не одно и то же и смешивать malloc и new нельзя
std::vector. особо пытливые могут написать для него свой allocator ![]() |
||||||
|
|||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
andrew_121, тут написано, что думает Страуструп по поводу мешанины С и С++ функций работы с памятью
http://www.research.att.com/~bs/bs_faq2.html#realloc а здесь Hamrick предлагает свой вариант решения проблемы http://www.daniweb.com/forums/showthread.p...=realloc+vs+new |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
![]() ![]() zim22, Спасибо! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
sparn |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 11.5.2006 Репутация: нет Всего: 1 |
В Си++ есть такая конструкция:
По сути это всего лишь корректное конструирование объекта на уже выделенном участке памяти, выделенном любым аллокатором. Подобным образом можно вызвать любой конструктор в том числе и копирования, например:
Так что если вы используете malloc, realloc или другие менеджеры памяти и хотите корректного конструирования объектов то это то что вам нужно. Ну и соответственно вызывайте деструкторы.
Думаю стоит заметить что в данном случае все объекты будут инициализированы конструктором по умолчанию и следовательно будет нетривиально корректно перекопировать старые объекты в новый участок памяти путём вызова конструктора копирования. В общем, если задача копировать старые объекты не стоит то можно использовать и такую конструкцию. Это сообщение отредактировал(а) sparn - 28.3.2009, 18:33 |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |