powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / еще вопрос по STL
10 сообщений из 10, страница 1 из 1
еще вопрос по STL
    #34893997
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял).
Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться.
Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно?
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894028
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TubrikКласс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял).
Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться.
Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно?

если в деструкторе класса массива указателей прописать нечто цикла, который пробегал бы по все элементам и вызывал

delete item;

или же при удалении объекта из массива попутно вызывать и delete для него
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894107
TubrikКласс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял).
Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться.
Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно?
Можно хранить в векторе т.н. "умные" указатели, которые ведут подсчет ссылок и разрушают объект автоматически, когда счетчик ссылок обнуляется (в конструкторах и операторах присваивания они увеличивают счетчик ссылок, а в десктрукторах - уменьшают). Есть масса разновидностей готовых библиотек таких указателей. Очень распространены boost::shared_ptr, boost::intrusive_ptr (для COM-объектов микрософтовские: com_ptr и ATL::CComPtr). Насчет vector::push_back: наверное, все реализации STL резервируют память для вектора, так что при добавлении в конец количество выделений памяти растет логарифмически от количества добавляемых элементов (т.е. очень медленно).
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894130
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum
если в деструкторе класса массива указателей прописать нечто цикла, который пробегал бы по все элементам и вызывал

delete item;

или же при удалении объекта из массива попутно вызывать и delete для него

Вообще я не совсем об этом спросил..
Деструкторе класса массива (например vector) вы предлагаете переопределить? А зачем, там же уже реалиовано удаление объектов?
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894161
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TubrikКласс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял).
Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться.
Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно?

Есть способ: использовать умные указатели, например, такие как boost:shared_ptr или свой аналог с коррекной семантикой копирования:

Код: plaintext
1.
std::vector<boost::shared_ptr<my_object> > vec;
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894165
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TubrikКласс vector (для примера), когда вызывается push_back() то он выделяет динамическую память и выполняет копирование помещаемого объекта в эту память (если я правильно понял).
Т.е. накладные расходы с выделением памяти и копированием. Можно, наверно, хранить не копии объектов, а только указатели на них. Но тогда придется объекты удалять вручную, а операция выделения памяти по-прежнему будет выполняться.
Вопрос: если ли способ помещать, например, в vector уже динамически-созданные объекты так, чтобы он не производил их повторное копирование и выделение памяти, но производил удаление самостоятельно?

1. reserve
2. shared_ptr
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894198
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik Cerebrum
если в деструкторе класса массива указателей прописать нечто цикла, который пробегал бы по все элементам и вызывал

delete item;

или же при удалении объекта из массива попутно вызывать и delete для него

Вообще я не совсем об этом спросил..
Деструкторе класса массива (например vector) вы предлагаете переопределить? А зачем, там же уже реалиовано удаление объектов?
я решил что по аналогии собираешся писать свой класс...
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894205
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Палло[
Можно хранить в векторе т.н. "умные" указатели, которые ведут подсчет ссылок и разрушают объект автоматически, когда счетчик ссылок обнуляется (в конструкторах и операторах присваивания они увеличивают счетчик ссылок, а в десктрукторах - уменьшают).

Как раз начала активно использовать их..

Мне не столько смущает, что вектор выделяет свою память для хранения помещаемых объектов, сколько сам момент копирования этих объектов, т.к. это может быть очень накладно.

Видимо единственных выход - это хранить указатели на помещаемы объекты (обычные или автоматические, чтобы самому не удалять).

-----------------------------------------------------
Попутный вопрос, библиотека tr1 еще не включена в С++ ?
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894214
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik Павел Палло[
Можно хранить в векторе т.н. "умные" указатели, которые ведут подсчет ссылок и разрушают объект автоматически, когда счетчик ссылок обнуляется (в конструкторах и операторах присваивания они увеличивают счетчик ссылок, а в десктрукторах - уменьшают).

Как раз начала активно использовать их..

Мне не столько смущает, что вектор выделяет свою память для хранения помещаемых объектов, сколько сам момент копирования этих объектов, т.к. это может быть очень накладно.

Видимо единственных выход - это хранить указатели на помещаемы объекты (обычные или автоматические, чтобы самому не удалять).

-----------------------------------------------------
Попутный вопрос, библиотека tr1 еще не включена в С++ ?

Как раз начала читать как Как раз начал
...
Рейтинг: 0 / 0
еще вопрос по STL
    #34894260
Tubrik Павел Палло
Можно хранить в векторе т.н. "умные" указатели, которые ведут подсчет ссылок и разрушают объект автоматически, когда счетчик ссылок обнуляется (в конструкторах и операторах присваивания они увеличивают счетчик ссылок, а в десктрукторах - уменьшают).

Как раз начала активно использовать их..

Мне не столько смущает, что вектор выделяет свою память для хранения помещаемых объектов, сколько сам момент копирования этих объектов, т.к. это может быть очень накладно.

Видимо единственных выход - это хранить указатели на помещаемы объекты (обычные или автоматические, чтобы самому не удалять).

-----------------------------------------------------
Попутный вопрос, библиотека tr1 еще не включена в С++ ?
Описание новинок в следующей версии стандарта С++ .
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / еще вопрос по STL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]