Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 23.03.2011, 00:02   #1
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Смех std

такой вопрос:

при использовании конструкции вида

 
vector< int* > intList;
 
for( int num = 0; num < 10; num++ )
{
    intList.push_back( new int( num * (rand() % 20)) );
};
 
...// some shit here
 
for( register unsigned int i = 0; i < intList.size(); i++ )
{
     delete intList.at( i );
};
 
intList.clear();
не произойдет ли утечек памяти?
__________________

(Offline)
 
Ответить с цитированием
Старый 23.03.2011, 00:11   #2
falcon
Разработчик
 
Аватар для falcon
 
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений
(для 470 пользователей)
Ответ: std

Не должно. С чего вдруг?



>>vector
>>intList

>>vector
>>List
руки оторвать тем, кто путает векторы и списки...

>>register unsigned int
для тестового примера тоже излишне.

и ваще, почему бы не пользоваться итераторами?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (23.03.2011)
Старый 23.03.2011, 00:17   #3
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: std

Итераторами я пользуюсь, и списки не путаю с динамическим массивом, это просто для примера. Вопрос был поставлен для перестраховки. Спасибо.

Причина по которой я решил пользоваться вектором с указателями на тип, потому-что, когда начинаешь запихивать в вектор что-то новое он вызывает конструктор копирования, а в некоторых случаях это не приемлимо
__________________

(Offline)
 
Ответить с цитированием
Старый 23.03.2011, 00:20   #4
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: std

как уже подметили, при обращении к елементам в любом контейнере следует обращятся через итераторы !! Это поможет избежать многих проблем !!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (23.03.2011)
Старый 23.03.2011, 00:22   #5
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: std

Спасибо. Учту
__________________

(Offline)
 
Ответить с цитированием
Старый 23.03.2011, 00:48   #6
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: std

Сообщение от falcon Посмотреть сообщение
и ваще, почему бы не пользоваться итераторами?
Сообщение от IGR Посмотреть сообщение
как уже подметили, при обращении к елементам в любом контейнере следует обращятся через итераторы !! Это поможет избежать многих проблем !!
итераторы это и есть указатели.
Ваш Кэп.

Последний раз редактировалось ffinder, 23.03.2011 в 00:49. Причина: копетан такой копетан
(Offline)
 
Ответить с цитированием
Старый 23.03.2011, 06:09   #7
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: std

чем это:
vector< int* > intList;
 
for( int num = 0; num < 10; num++ )
{
    intList.push_back( new int( num * (rand() % 20)) );
};
 
...// some shit here
 
for( register unsigned int i = 0; i < intList.size(); i++ )
{
     delete intList.at( i );
};
лучше этого:
vector< int > intList;
 
for( int num = 0; num < 10; num++ )
{
    intList.push_back(num * (rand() % 20));
};
 
...// some shit here
 
for( register unsigned int i = 0; i < intList.size(); i++ )
{
     intList.at( i )=0;
};
?

если же подразумевался new int[ num * (rand() % 20)], то нужен будет delete[]
и да - современным компиляторам начхать на register. хотя если тебе платят за байты кода...
(Offline)
 
Ответить с цитированием
Старый 23.03.2011, 10:51   #8
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: std

холи ты немного не понял мою мыслю. мне нужно вектор с указателями на тип а не просто вектор с типами.
__________________

(Offline)
 
Ответить с цитированием
Старый 23.03.2011, 17:25   #9
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: std

т.е инт тупо для примера? в алгоритме что то серьезнее? в любом случае, указатели лучше все же занулять после удаления. так, на всякий случай.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (23.03.2011)
Старый 23.03.2011, 18:14   #10
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: std

в алгоритме список пуль, ботов и прочего. инт для примера
__________________

(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 14:05.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com