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

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

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

C++ Конструктор копирования
конструктор копирования C++
C++ Конструктор копирования
конструктор копирования C++
C++ Конструктор копирования в c++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2014, 15:26     Конструктор копирования #4
Написали же:
Цитата Сообщение от dzrkot Посмотреть сообщение
выделить память в конструкторе копирования
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 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...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
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++
Конструктор копирования C++
C++ Конструктор копирования

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

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

Не по теме:

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

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

Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru