Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

Пишу примитивный никому не нужный контейнер

25.09.2014, 10:12. Показов 4160. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
захотелось для практики написать аналог array из STL ну не полностью аналог, так, по своему как мне он был бы удобен... безо всяких лишних на мой взгляд переобъявлений типов аля "typedef size_t size_type", которых куча объявлена в реальном array и т.п. лишних вещей... в общем сейчас пока что проблема с конструктором копирования, вроде кажется правильно все, но x в main упорно хранит мусор в конце ну и + посмотрите вообще все очень плохо написано или как?

array.h
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
56
57
#include <iostream>
#include <initializer_list>
 
using namespace std;
 
template <typename T>
class array
{
private:
    //Указатель на память в которой хранится массив
    T* ptr;
 
    //Размер массива
    size_t _size;
 
public:
    //Конструктор по умолчанию
    array() : ptr(0), _size(0) {};
 
    //Конструктор копирования
    array(array& arr)
    {
        _size = arr._size;
        ptr = new T[arr._size];
        memcpy(ptr, arr.ptr, arr._size);
    }
 
    //Конструктор, создающий массив заданного размера
    array(size_t size) : _size(size), ptr(new T[size]) {}
 
    //Конструктор, инциализирующий массив
    array(initializer_list<T> values) : _size(values.size()), ptr(new T[values.size()])
    {
        const T* tmp = values.begin();
        for (int i = 0; i < _size; i++)
            ptr[i] = *tmp++;
    }
 
    //Деструктор
    ~array() { delete[] ptr; }
 
    //Перегрузка оператора [] для доступа к элементам массива
    T& operator [] (size_t index) { return ptr[index]; }
 
    //Получение размера массива
    size_t size() { return _size; }
 
    //Изменение размера массива
    void resize(size_t newsize)
    {
        T* tmp = new T[newsize];
        memcpy(tmp, ptr, _size < newsize ? _size : newsize);
        delete[] ptr;
        ptr = tmp;
        _size = newsize;
    }
};
main.cpp
C++
1
2
3
4
5
6
7
8
9
#include "array.h"
 
int main()
{
    array<int> a({ 2, 3, 1 });
    array<int> b(a);
    int x[] = { b[0], b[1], b[2] };
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2014, 10:12
Ответы с готовыми решениями:

1 Апреля...Никому не веря
1 апреля - день, не внесенный ни в какие календари знаменательных дат и всенародных праздников и тем не менее засевший уже где-то в глубине...

Никому не нужен стажер верстальщик?
Не так давно, где-то месяц назад, стал брать заказы. Но понимаю что мне еще нужно развиваться. В связи с этим хотелось бы найти...

Заменить контейнер vector, использовавшийся для хранения текстовых строк (листинг 2.3), на контейнер list
Здравствуйте форумчане, может кто объяснить как делать это задание и что собственно мы тут вообще делаем. сам листинг 2.3 ниже ...

42
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
26.09.2014, 12:38
Студворк — интернет-сервис помощи студентам
0x10, суть не в этом. Ведь если исключение было выброшено на n-ом элементе, то для n-1 элементов деструкторы не будут вызваны, а это плохо... весьма плохо...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
26.09.2014, 12:47
Цитата Сообщение от Ilot Посмотреть сообщение
то для n-1 элементов деструкторы не будут вызваны
Разве?
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
#include <iostream>
 
struct My {
    static int count;
    int id_;
 
    My(): id_{count++} {
        if (id_ == 10) throw 42;
    }
 
    ~My() {
        std::cout << "~" << id_ << std::endl;
    }
};
 
int My::count = 0;
 
int main() {
    try {
        new My[42];
    } catch (...) {
 
    }
}
Code
1
2
3
4
5
6
7
8
9
10
~9
~8
~7
~6
~5
~4
~3
~2
~1
~0
http://ideone.com/8cWJqb

Добавлено через 1 минуту
Ну ок, если совсем не отлавливать - будет просто аварийное завершение. Насколько это плохо - надо уже смотреть по ситуации.
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
26.09.2014, 12:55
0x10, хм, а я почему-то думал иначе. Благодарю теперь учту на будущее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2014, 12:55

Зачем вы пишите никому не нужные сайты?
Поисковики это как газеты с объявлениями, можно за деньги и гарантировано, а можно попробовать опубликовать бесплатно. Но чтобы...

Неужто этого с почтой никому не приходилось делать ????
Привет всем ситуация такова Поручили мне на работе обрабатывать почту поступающую к нам и отсылать то что нужно на сотовые телефоны Все...

Какой смысл иметь СДЛ если он никому не нужен?
Здравствуйте! Мне вот интересно, СДЛ сайты, находящиеся в ЯК и приносящие около 5тр/месяц вообще хоть что-нибудь стОят? Хотел продать: ...

Народ, а никому не попадалась плата ардуино - под ЛУТ/смд?
собственно, рисовать лень. покупать долго, хотя нашел место, где продадут несобранную. Хочу сына немного научить феном работать. под...

Что значит НИКОМУ неизвестный (даже гуглу) атрибут SMART HDD?
У меня HDD WD Gold 1 TB Программа Victoria показала атрибут 16 GAS GUAGE как критический. А вот что он значит никто не знает. Нет вообще...


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

Или воспользуйтесь поиском по форуму:
43
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru