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

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

Восстановить пароль Регистрация
 
Android256
Сообщений: n/a
19.12.2010, 22:09     Конструктор копирования #1
Здраствуйте! Ниже приведено 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;
}
 Комментарий модератора 
Используйте теги форматирования кода.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
deadlock
 Аватар для deadlock
372 / 351 / 7
Регистрация: 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
 Аватар для deadlock
372 / 351 / 7
Регистрация: 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     Конструктор копирования
Ответ Создать тему
Опции темы

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