Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Сжать массив, удалив из него все элементы, величина которых находится на интервале [а,b] http://www.cyberforum.ru/cpp-beginners/thread164951.html
1) В одномерном массиве, который состоит из N действительных элементов, вычислить: - минимальный за модулем элемент массива(ето я вроде знаю как делать а остальное не получается) - сумму модулей элементов, которые расположены после первого отрицательного элемента. - Сжать массив, удалив из него все элементы, величина которых находится на интервале . Место, которые освободится в конце массива...
C++ Способы создания объектов и арифметика указателей Вот сам код: class ListNode { public: ListNode(int val) { next=NULL; i=val; } ListNode* next; http://www.cyberforum.ru/cpp-beginners/thread164949.html
Перестановки из n чисел C++
Не получается написать функцию, которая сохраняет всевозможные перестановки из n элементов в двухмерный массив int arr, где len-число всевозможных перестановок. Как это можно реализовать?
Объединение данных файлов-комментариев .srt C++
Если кому не сложно, то напишите программку, которая объединяет данные у файлов-комментариев .srt. А конкретно объединяет перевод фразы одного и другого языка. Например film_ru.srt и film_en.srt имеет такое содержание 1 00:00:04,070 --> 00:00:05,904 "Привет и пока" и
C++ Двунаправленный линейный список http://www.cyberforum.ru/cpp-beginners/thread164908.html
Доброго времени суток! Я перевелся на 2ой курс в институте, где изучали С++, которого у меня не было. Поэтому спрашиваю вас - что такое двулинейный направленный список, как он реализуется (что нужно изучить, чтобы это сделать) и как с ним работать (добавлять, удалять, искать и т.д.)? Вообще задайте направление мыслей, а то непонятно что и как делать.
C++ Умножение матрицы на число ну вобщем былбы примного благодарен еслиб помогли с такой вот задачкой: 2 3.1 7.5 11 1.7 1 0 7.4 5 дано: А= 4.5 10.7 , В= 5 4 2 , С= 7 8 , В= 9 8 7 1 5 6 K=B(A+C)+D Поможите люди добрые?=) подробнее

Показать сообщение отдельно
alexzak
84 / 57 / 1
Регистрация: 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;
   }
}
 
Текущее время: 23:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru