|
|
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
Класс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял). Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться. Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 12:45:39 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
TubrikКласс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял). Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться. Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно? если в деструкторе класса массива указателей прописать нечто цикла, который пробегал бы по все элементам и вызывал delete item; или же при удалении объекта из массива попутно вызывать и delete для него ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 12:52:07 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
TubrikКласс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял). Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться. Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно? Можно хранить в векторе т.н. "умные" указатели, которые ведут подсчет ссылок и разрушают объект автоматически, когда счетчик ссылок обнуляется (в конструкторах и операторах присваивания они увеличивают счетчик ссылок, а в десктрукторах - уменьшают). Есть масса разновидностей готовых библиотек таких указателей. Очень распространены boost::shared_ptr, boost::intrusive_ptr (для COM-объектов микрософтовские: com_ptr и ATL::CComPtr). Насчет vector::push_back: наверное, все реализации STL резервируют память для вектора, так что при добавлении в конец количество выделений памяти растет логарифмически от количества добавляемых элементов (т.е. очень медленно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:11:55 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
Cerebrum если в деструкторе класса массива указателей прописать нечто цикла, который пробегал бы по все элементам и вызывал delete item; или же при удалении объекта из массива попутно вызывать и delete для него Вообще я не совсем об этом спросил.. Деструкторе класса массива (например vector) вы предлагаете переопределить? А зачем, там же уже реалиовано удаление объектов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:16:37 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
TubrikКласс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял). Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться. Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно? Есть способ: использовать умные указатели, например, такие как boost:shared_ptr или свой аналог с коррекной семантикой копирования: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:20:31 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
TubrikКласс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял). Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться. Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно? 1. reserve 2. shared_ptr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:21:04 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
Tubrik Cerebrum если в деструкторе класса массива указателей прописать нечто цикла, который пробегал бы по все элементам и вызывал delete item; или же при удалении объекта из массива попутно вызывать и delete для него Вообще я не совсем об этом спросил.. Деструкторе класса массива (например vector) вы предлагаете переопределить? А зачем, там же уже реалиовано удаление объектов? я решил что по аналогии собираешся писать свой класс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:27:00 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
Павел Палло[ Можно хранить в векторе т.н. "умные" указатели, которые ведут подсчет ссылок и разрушают объект автоматически, когда счетчик ссылок обнуляется (в конструкторах и операторах присваивания они увеличивают счетчик ссылок, а в десктрукторах - уменьшают). Как раз начала активно использовать их.. Мне не столько смущает, что вектор выделяет свою память для хранения помещаемых объектов, сколько сам момент копирования этих объектов, т.к. это может быть очень накладно. Видимо единственных выход - это хранить указатели на помещаемы объекты (обычные или автоматические, чтобы самому не удалять). ----------------------------------------------------- Попутный вопрос, библиотека tr1 еще не включена в С++ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:28:14 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
Tubrik Павел Палло[ Можно хранить в векторе т.н. "умные" указатели, которые ведут подсчет ссылок и разрушают объект автоматически, когда счетчик ссылок обнуляется (в конструкторах и операторах присваивания они увеличивают счетчик ссылок, а в десктрукторах - уменьшают). Как раз начала активно использовать их.. Мне не столько смущает, что вектор выделяет свою память для хранения помещаемых объектов, сколько сам момент копирования этих объектов, т.к. это может быть очень накладно. Видимо единственных выход - это хранить указатели на помещаемы объекты (обычные или автоматические, чтобы самому не удалять). ----------------------------------------------------- Попутный вопрос, библиотека tr1 еще не включена в С++ ? Как раз начала читать как Как раз начал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:29:47 |
|
||
|
еще вопрос по STL
|
|||
|---|---|---|---|
|
#18+
Tubrik Павел Палло Можно хранить в векторе т.н. "умные" указатели, которые ведут подсчет ссылок и разрушают объект автоматически, когда счетчик ссылок обнуляется (в конструкторах и операторах присваивания они увеличивают счетчик ссылок, а в десктрукторах - уменьшают). Как раз начала активно использовать их.. Мне не столько смущает, что вектор выделяет свою память для хранения помещаемых объектов, сколько сам момент копирования этих объектов, т.к. это может быть очень накладно. Видимо единственных выход - это хранить указатели на помещаемы объекты (обычные или автоматические, чтобы самому не удалять). ----------------------------------------------------- Попутный вопрос, библиотека tr1 еще не включена в С++ ? Описание новинок в следующей версии стандарта С++ . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:39:12 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=271&tid=2027946]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 383ms |

| 0 / 0 |
