Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

uninitialized_fill() справляется с итераторами.

Posted on 24 сентября, 201326 сентября, 2013 by admin

Попробуйте переписать uninitialized_fill() (параграф 19.4.4, Е.3.1) так, что бы он справлялся с итераторами, которые генерируют исключения в операциях — и ++. Возможно ли это? Если да, то какова стоимость такого решения? Если нет, то почему?

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

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
56
57
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
 
class ex{};
 
template<class For, class T>
void uninitialized_fill(For beg, For end,  T& x)
{
For p;
try
{
int count(0);
for(p=beg;p!=end;++p)
{
cout <<"mu tyt 1"<<endl;
if(count==2)throw 1;
new (static_cast<void*>(&*p))T(x);//создаем копию х в *p (параграф 10.4.11)
count++;
}
//&*p мы получаем адресс разыменованого элемента с целью получения указателя.
}
catch(...)
{
cout <<"mu tyt"<<endl;
for(For q=beg;q!=p;++q)
{
cout <<"one"<<endl;
try
{
(&*q)->~T();//вызываем деструктор
}
catch(...)
{
 
}
}
throw;
}
}
 
int main()
{
vector<int> v(4,10);
int val(4);
uninitialized_fill<vector<int>::iterator,int>(v.begin(),v.end(),val);
for(int i=0;i<v.size();i++)
cout <<v[i]<<' ';
cout <<endl;
 
 
return 0;
}

В общем делаем выводы, для итераторов защиту не получиться сделать, тут уже как повезет.

[youtube]https://www.youtube.com/watch?v=4BqRK_sYDy4[/youtube]

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • uncategorized (1)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant