forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   std (http://forum.boolean.name/showthread.php?t=14460)

mr.DIMAS 23.03.2011 00:02

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();

не произойдет ли утечек памяти?

falcon 23.03.2011 00:11

Ответ: std
 
Не должно. С чего вдруг?



>>vector
>>intList

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

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

и ваще, почему бы не пользоваться итераторами?

mr.DIMAS 23.03.2011 00:17

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

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

IGR 23.03.2011 00:20

Ответ: std
 
как уже подметили, при обращении к елементам в любом контейнере следует обращятся через итераторы !! Это поможет избежать многих проблем !!

mr.DIMAS 23.03.2011 00:22

Ответ: std
 
Спасибо. Учту

ffinder 23.03.2011 00:48

Ответ: std
 
Цитата:

Сообщение от falcon (Сообщение 183515)
и ваще, почему бы не пользоваться итераторами?

Цитата:

Сообщение от IGR (Сообщение 183517)
как уже подметили, при обращении к елементам в любом контейнере следует обращятся через итераторы !! Это поможет избежать многих проблем !!

итераторы это и есть указатели.
Ваш Кэп.

HolyDel 23.03.2011 06:09

Ответ: 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. хотя если тебе платят за байты кода...

mr.DIMAS 23.03.2011 10:51

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

HolyDel 23.03.2011 17:25

Ответ: std
 
т.е инт тупо для примера? в алгоритме что то серьезнее? в любом случае, указатели лучше все же занулять после удаления. так, на всякий случай.

mr.DIMAS 23.03.2011 18:14

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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot