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

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

Войти
Регистрация
Восстановить пароль
 
Android256
Сообщений: n/a
#1

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

19.12.2010, 22:09. Просмотров 938. Ответов 3
Метки нет (Все метки)

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

Исходник 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>
using namespace std;
 
class ClassName
{
    public:
        ClassName()
        {
            cout<<"ClassName!!!\n";
        }
        ~ClassName()
        {
            cout<<"~ClassName!!!\n";
        }
};
void f(ClassName o)
{
    cout<<"Function f!!!\n";
}
void main()
{
    ClassName c1;
    f(c1);
}
Исходник 2:
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
#include <iostream>
#include <string.h>
using namespace std;
 
class student
{
    public:
        student()
        {
            cout<<"class student\n";
        }
        ~student()
        {
            cout<<"~class student\n";
        }
};
void function2(student *C)
{
    cout<<"In function2\n";
}
void main()
{
    student *C;
    C=new student();
 
    function2(C);
    delete C;
}
 Комментарий модератора 
Используйте теги форматирования кода.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2010, 22:09     Конструктор копирования
Посмотрите здесь:

Конструктор копирования - C++
Здравствуйте. Есть класс. Не могу понять как правильно написать и вызвать конструктор копирования. #include &lt;string.h&gt; #include...

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

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

конструктор копирования - C++
Помогите вывести конструктор копирования #include &lt;iostream&gt; //библиотека C++, позволяющая использовать систему ввода-вывода C++ ...

Конструктор копирования. - C++
struct list { m_class *data; list *Next; list *Prev; }; class Lst {

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

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

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

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

Конструктор копирования - C++
Может быть глупый вопрос, а может я глупый... Конструктор копирования имеет такой синтаксис имякласса(const имякласса &amp;){ тело...

С++: new и конструктор копирования - C++
Пусть есть класс Example (с конструктором копирования). Example *e1; e1 = ...; Example *e3 = new Example(*e1); --действия с...

Конструктор копирования - C++
Привет Подскажите пожалуйста, как правильно сделать конструктор копирования. Заголовки: class String { public: char *Data; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
deadlock
375 / 354 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
19.12.2010, 22:13     Конструктор копирования #2
любой конструктор вызывается при выделении памяти при помощи new, конструктор копирования создается автоматически (хотя никто не мешает его определить и руками)
Android256
Сообщений: n/a
19.12.2010, 22:30     Конструктор копирования #3
Спасибо за ответ, но я еще больше запутался. Вот смотри: если мы создаем объект "A",выделив при этом для него память с пом.new, передаем его в Функцию, то создается отдельная копия этого объекта (назовем ее формально "Acopy"), которая будет указывать на выделенную память под исходный объект А. После того, когда функция завершит свое выполнение, копия объекта "Аcopy" с пом. деструктора разрушиться, при этом она разрушит память, на которую она указывала, т.е. память объекта "А". А если память под объект "A" разрушиться, то, соответственно у нас преждевременно разрушиться сам объект "A". Поэтому, как я понимаю, нужен констр коп. И указывать его вручную, наверное, стоит.
Тем более, деструктор всегда надо указывать в программе, а после выполнения программы, количество деструкторов д.б равным количеству конструкторов. Если я не прав, то ответь, пожалуйста.
deadlock
375 / 354 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 08:28     Конструктор копирования #4
то, что ты описал:
C++
1
2
3
typename *A=new typename; //"мы создаем объект "A""
void F(A); //"передаем его в Функцию"
//если внутри функции ты не делал delete A; то после завершения функции объект А продолжает //жить, его копия внутри функции уничтожена
Цитата Сообщение от Android256 Посмотреть сообщение
Тем более, деструктор всегда надо указывать в программе
не обязательно, он будет создан автоматически, если не указан руками
Yandex
Объявления
20.12.2010, 08:28     Конструктор копирования
Ответ Создать тему
Опции темы

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