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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Тамика
Котовчанин
912 / 455 / 145
Регистрация: 16.02.2010
Сообщений: 3,144
Записей в блоге: 27
#1

Копирующий конструктор - C++

13.02.2014, 19:23. Просмотров 845. Ответов 20
Метки нет (Все метки)

Добрый вечер всем!
Следущая проблема - решила создать свой персональный vector - int_array.
Но возникла проблема... Не пойму, как организован копирующий конструктор. Мои попытки его воссоздать приводят к утечке памяти.
Надеюсь, вы разъясните мне что к чему.
Заранее спасибо!
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
class int_array
{
    int *mas, size, capacity;
public:
    int_array(): mas(0), size(0), capacity(0)
    {}
 
    ~int_array()
    {
        delete [] mas;
    }
    int_array(int n)
    {
        mas = new int[n];
        size = 0;
        capacity = n;
    }
    //copy constructor
    int_array(int_array& in)
    {
        *this = in;
    }
    int getSize() const
    {
        return size;
    }
    int getCapacity()
    {
        return capacity;
    }
 
    void resize(int n)
    {
        int *temp = new int[n];
        temp = mas;
        delete [] temp;
    }
    void push_back(int val)
    {
        if (size < capacity) mas[size++] = val; 
        // else throw ...  
    }
    void pop_back()
    {
        --size;
    }
    int operator[] (int n)
    {
        return mas[n];
    }
    int operator= (int n)
    {
        
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2014, 19:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирующий конструктор (C++):

копирующий конструктор !!! - C++
Вот это верный вид конструктора копирования??? class VK{ int b; public: VK(const VC &amp;); } VL::VK(const VK &amp; tmp){ b=tmp.b; ...

Копирующий конструктор - C++
Помогите пожалуйста реализовать копирующий конструктор, у меня он выдает нули =\ Вот код: #include &lt;iostream&gt; #include...

Копирующий конструктор - C++
Здравствуйте, кто нибудь может сказать, почему при создании копирующего конструктора нужно указывать ссылку на объект? #include...

Копирующий конструктор - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;sstream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; #include&lt;string&gt; #include&lt;limits&gt; ...

копирующий конструктор и иерархия - C++
Создать иерархию типов, описывающую - студента, отца семейства и студента-отца семейства. Классы должны конструкторы, включая конструктор...

Закрытый копирующий конструктор - C++
В данном упражнении описана методика, которая может помочь отказаться от копирующих конструкторов. Создайте класс Х и объявите (но не...

20
Тамика
Котовчанин
912 / 455 / 145
Регистрация: 16.02.2010
Сообщений: 3,144
Записей в блоге: 27
14.02.2014, 17:56  [ТС] #16
Цитата Сообщение от alsav22 Посмотреть сообщение
А если закоментировать?
C++
1
 m.resize(10);
Может теперь дело не в копирующем конструкторе, а в кривом коде?
Может.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.02.2014, 18:20 #17
C++
1
2
3
4
5
6
7
8
9
void resize(int n)
    {
        int *temp = new int[n];
        capacity = n;
        for (int i = 0; i < size; ++i)
            temp[i] = mas[i];
        delete [] mas;
        mas = temp;
    }
Добавлено через 18 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
Потому что вот здесь:
C++
1
2
std::cout << "Result of copy constructor\n";
int_array i = m;
работает не копирующий конструктор, а оператор присваивания
Тут соврал, работает здесь копирующий конструктор.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int_array& operator=(const int_array& in)
    {
        if (&in == this)
            return *this;
        delete [] mas;
        size = in.size;
        capacity = in.capacity;
        mas = new int[capacity];
        for (int i = 0; i < size; ++i)
            mas[i] = in.mas[i];
        return *this;
    }
1
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
14.02.2014, 19:26 #18
Цитата Сообщение от Тамика Посмотреть сообщение
Добрый вечер всем!
Следущая проблема - решила создать свой персональный vector - int_array.
А можно поинтересоваться, для чего писать персональный вектор?
0
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,069
14.02.2014, 20:24 #19
Цитата Сообщение от DrOffset Посмотреть сообщение
А можно поинтересоваться, для чего писать персональный вектор?
If you understand int and vector, you understand C++. The rest is "details" (1300+ pages of details). (Bjarne Stroustrup)
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
14.02.2014, 20:35 #20
Цитата Сообщение от 0x10 Посмотреть сообщение
If you understand int and vector, you understand C++. The rest is "details" (1300+ pages of details). (Bjarne Stroustrup)
Это прекрасно.
Только я не за этим спрашивал. Если человек пишет вектор для использования в проекте на работе, то во-первых стоит посмотреть на существующие реализации (помимо std::vector). А во-вторых, если таковой не найдется, то мы все, и я, могли бы подсказать, как ее лучше написать.
То, что было продемонстрировано ТС годится только в качестве упражнения для обучения.
Чтобы выяснить истинную задачу (обучение для себя или решение вопроса на работе), и я и задал этот вопрос.
0
Тамика
Котовчанин
912 / 455 / 145
Регистрация: 16.02.2010
Сообщений: 3,144
Записей в блоге: 27
17.02.2014, 12:31  [ТС] #21
Цитата Сообщение от 0x10 Посмотреть сообщение
If you understand int and vector, you understand C++. The rest is "details" (1300+ pages of details). (Bjarne Stroustrup
В яблочко.

Добавлено через 59 секунд
Цитата Сообщение от DrOffset Посмотреть сообщение
Это прекрасно.
Только я не за этим спрашивал. Если человек пишет вектор для использования в проекте на работе, то во-первых стоит посмотреть на существующие реализации (помимо std::vector). А во-вторых, если таковой не найдется, то мы все, и я, могли бы подсказать, как ее лучше написать.
То, что было продемонстрировано ТС годится только в качестве упражнения для обучения.
Чтобы выяснить истинную задачу (обучение для себя или решение вопроса на работе), и я и задал этот вопрос.
Не по работе. Для себя. Но для дальнейшего использования(когда изучу его и напишу полноценно).
0
17.02.2014, 12:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 12:31
Привет! Вот еще темы с ответами:

Копирующий конструктор абстрактного класа - C++
Добрый вечер. Сразу к делу. Есть абстрактный класс: class Product abstract { protected: int lipids; string brand; ...

Когда в классе нужен копирующий конструктор? - C++
Меня интересует вопрос когда в классе нужен копирующий конструктор.

Копирующий конструктор в списке инициализации членов класса - C++
Добрый день. Сегодня обнаружил кое-что для себя странное и непонятное. В общем-то смотрим код: #include &lt;iostream&gt; ...

Копирующий конструктор класса, содержащего переменную-член указатель - C++
Практикуюсь по книге Стенли Липпмана &quot;Язык программирования C++ вводный курс&quot; 4 изд. Упражнение 13.4. Используя приведенный ниже набросок...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru