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

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

Войти
Регистрация
Восстановить пароль
 
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
#1

Конструктор копирования - C++

29.05.2014, 14:56. Просмотров 234. Ответов 7
Метки нет (Все метки)

есть класс, в нем есть указать на участок памяти, как написать для этого класс конструктор копирования? как работает конструктор с указателями?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2014, 14:56     Конструктор копирования
Посмотрите здесь:

Конструктор копирования - C++
Помогите пожалуйста разобраться, необходимо добавить конструктор копирования, теорию знаю, а как на практике применить не знаю. Программа...

конструктор копирования - C++
не могу понять, почему не срабатывает конструктор копирования. #include <iostream> using namespace std; class Shape { ...

Конструктор копирования. - C++
Нужно для задачи дописать конструктор копирования. Вся задача в условии почти решена. Собственно вот условие и как она должна выглядеть: ...

Конструктор копирования - C++
Здравствуйте! Есть класс А с конструктором копирования и класс B, который содержит вектор указателей на А. Class A { ...

Конструктор копирования в c++ - C++
Добрый день, такая задача по с++ Какая ошибка в следующей реализации конструктора копирования по умолчанию и деструктора?? Какой еще...

Конструктор копирования - C++
Есть вопрос. Как объект одного класса передать в объект другого класса?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
29.05.2014, 15:10     Конструктор копирования #2
Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
в нем есть указать на участок памяти
вероятно что выделить память в конструкторе копирования и скопировать содержимое из копируемого объекта
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
29.05.2014, 15:23  [ТС]     Конструктор копирования #3
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
    #include <iostream>
    using namespace std;
 
    class A
    {  
    int *a;
    
    public:
 
    A()
    {
        a=new int[5];
            *a=0;
    }
    
    A(const A &obj)
    {      
        *a=*(obj.a);
    }
    
    };
    
 
    int main()
    {
    A obj;
    A obj1(obj); 
    A obj2 = obj1;
    return 0;
    }
ошибка вы/деления памяти, но не могу понять почему
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2014, 15:26     Конструктор копирования #4
Написали же:
Цитата Сообщение от dzrkot Посмотреть сообщение
выделить память в конструкторе копирования
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
29.05.2014, 15:36     Конструктор копирования #5
Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
ошибка вы/деления памяти, но не могу понять почему
Забыли в конструкторе копий выделить память.
C++
1
2
3
4
5
    A(const A &obj)
    {
      a=new int[5];
        *a=*(obj.a);
    }
Сразу оговорюсь у вас очень плохое решение, сказать точнее не правильное.

Добавлено через 8 минут
Что бы не бояться утечки памяти можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <memory>
 
class A {
    std::shared_ptr<int> a;
public:
    A(): a(new int)
    { *a = 0; }
    A(const A &obj): a(new int)  {
        *a = *obj.a;
    }
};
 
int main() {
    A obj;
    A obj1(obj);
    A obj2 = obj1;
    return 0;
}
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
29.05.2014, 15:40     Конструктор копирования #6
ну вообщем да всё уже сказали. У вас есть указатель, но в конструкторе по-усолчанию вы выделяете под него память, а в конст копирования вы пытаетесь в разыменованый указатель записать значение, хотя памяти у него нет
Maxvell_2010
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
29.05.2014, 17:17  [ТС]     Конструктор копирования #7
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
    #include <iostream>
    using namespace std;
 
    class A
    {  
    int *a;
    
    public:
 
    A()
    {
        a=new int[5];
            *a=0;
    }
    
    A(const A &obj)
    {   
        a =new int [10] ;   
        *a=*obj.a;
    }
    
    };
    
 
    int main()
    {
    A obj;
    A obj1(obj); 
    A obj2 = obj1;
    return 0;
    }
всем спасибо, сделал так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2014, 17:18     Конструктор копирования
Еще ссылки по теме:

Конструктор копирования - C++
Подскажите пожалуйста в моём случае конструктор копирования правильно реализован? class Massiv { private: float *a; ...

Конструктор копирования - C++
Ребята!! Вроде все получается, да только вот сделала конструктор копирования (А он мне, правда, нужен!) - и бух! программа ругается на...

Конструктор копирования - C++
Конструктор копирования в качестве параметра принимает ссылку на экземпляр типа класса. Вопрос заключается, почему именно...

Конструктор копирования - C++
Добрый вечер. Начал изучать перегрузку операций и конструктор копирования. Лазил в инете и налепил такой код. Только вот не могу понять как...


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

Или воспользуйтесь поиском по форуму:
dzrkot
29.05.2014, 17:18     Конструктор копирования
  #8

Не по теме:

Цитата Сообщение от Maxvell_2010 Посмотреть сообщение
всем спасибо, сделал так
тут принято под полезным сообщением ставить +1спасибо

Yandex
Объявления
29.05.2014, 17:18     Конструктор копирования
Ответ Создать тему
Опции темы

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