Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926

Хранение указателей в контейнерах

11.09.2010, 14:28. Показов 4781. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я тут на форуме читал мнение,что хранение указателей в контейнерах - это плохо. Все,кто так думает,не могли бы вы обосновать данное утверждение с точки зрения C++ программирования?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.09.2010, 14:28
Ответы с готовыми решениями:

Хранение указателей в DLL
Доброго времени суток, уважаемые знатоки! Суть вопроса: создаю в MS VS 2012 (С++) динамическую библиотеку, в ней хранятся описания...

Стандартные функции поиска элементов в контейнерах
Какие есть стандартные библиотеки/ф-ции поиска в с++? Нашел find(), но не совсем понятна его работа. Как я понял, он возвращает итератор на...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей?
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

27
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
12.09.2010, 13:45
Студворк — интернет-сервис помощи студентам
alexzak, что, если исключение возникнет во время push_back ? Например, при аллокации на платформе с ограниченными ресурсами.

UPD. Да принципе ничего не должно случиться.
1
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.09.2010, 13:48
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
что, если исключение возникнет во время push_back ? Например, при аллокации на платформе с ограниченными ресурсами.
значит еще и его нужно в try-catch обернуть
1
84 / 57 / 8
Регистрация: 07.08.2010
Сообщений: 185
12.09.2010, 20:04
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
alexzak, что, если исключение возникнет во время push_back ? Например, при аллокации на платформе с ограниченными ресурсами.

UPD. Да принципе ничего не должно случиться.
Все будет нормально, для этого и unique_ptr. Можно заменить на auto_ptr, разницы нет. В принципе это типичный метод (try-catch(...)-throw). Даже в стандартной библиотеке dinkumware так в некоторый местах делается до сих пор. Но это можно элементарно реструктруировать в автоматический объект, что я оставил на потом (не всё же сразу показывать ).

Но, естественно, здесь есть свой tradeoff. Какой? Кто скажет?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <vector>
#include <string>
#include <memory>
#include <stdexcept>
#include <algorithm>
 
struct test {
   test() { std::cout << "constructor called 0x" << this << std::endl; }
   ~test() { std::cout << "destructor called 0x" << this << std::endl; }
};
 
struct not_safe_raii {
    struct proctor {
        proctor(std::vector<test*> & val)
            : svec(val)
        {}
 
        ~proctor() {
            for (auto it = svec.begin(); it != svec.end(); ++it) {
                delete *it;
            }
        }
 
        std::vector<test*> & svec;
    };
 
   not_safe_raii()
       : svec()
       , svec_owner(svec)
    {
        for (int i = 0; i < count; ++i) {
            std::unique_ptr<test> obj(new test());
            svec.push_back(obj.get());
            obj.release();
 
            if (i == 4) {
                throw std::runtime_error("Oops ;)");
            }
        }
    }
 
private:
   enum { count = 10 };
   std::vector<test*> svec;
   proctor svec_owner;
};
 
int main() {
   try {
      not_safe_raii data;
   } catch ( const std::exception& e ) {
      std::cout << "exception throwing: " << e.what() << std::endl;
   }
}
1
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
12.09.2010, 20:28
Блин, что-то туплю.

Добавлено через 15 минут

Не по теме:

alexzak, слух, а тебе никсман похерил репу? :)

0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.09.2010, 20:29
ппц. довел до состояния спагетти
скажи, ты намеренно все в кал превращаешь?

Добавлено через 23 секунды
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
тебе никсман похерил репу?
угу. за говнокод.
0
84 / 57 / 8
Регистрация: 07.08.2010
Сообщений: 185
12.09.2010, 20:37
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
что на случай попытки встатить код между push_back и release?
Это, кстати, хороший вопрос. В С++ в некоторых местах программы нельзя допускать исключений ни при каких обстоятельствах. Иначе невозможно писать правильные с точки зрения управления ресурсами программы. Это одно из таких мест. Другое (типичное) место - функция swap, на которой основана идиома copy-and-swap.
1
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
12.09.2010, 20:46
Цитата Сообщение от alexzak Посмотреть сообщение
Это, кстати, хороший вопрос. В С++ в некоторых местах программы нельзя допускать исключений ни при каких обстоятельствах. Иначе невозможно писать правильные с точки зрения управления ресурсами программы. Это одно из таких мест. Другое (типичное) место - функция swap, на которой основана идиома copy-and-swap.
Насколько я знаю, с новым синтаксисом ситуация с ф-цией swap поменяется кардинальным образом - больше нет копирования, соответственно не возникнет потенциальных исключений.
2
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.09.2010, 23:04
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
Насколько я знаю, с новым синтаксисом ситуация с ф-цией swap поменяется кардинальным образом - больше нет копирования, соответственно не возникнет потенциальных исключений.
а вот это уже интересно. почитаем-ка...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2010, 23:04

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си)
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Как обойтись без указателей и указателей на указатель?
Ибо не совсем выходит понять,что на что тут указывает #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using...

Различия указателей char* от указателей других типов
Помогите пожалуйста разобраться! Прочитал раздел про указатели и даже вроде бы понял. Что касается указателей на тип int. Но что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru