63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

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

25.09.2014, 10:12. Показов 4164. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru