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

(конструктор) SmartPointer(Temp* p = NULL) - C++

Восстановить пароль Регистрация
 
L3xx__
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 17
04.08.2014, 01:18     (конструктор) SmartPointer(Temp* p = NULL) #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
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
using namespace std;
class Temp
{
    int TEMP;   
    public:
        //конструктор
        Temp(){TEMP=25;}
        //функция показа на экран
        void TempFunction(){
            cout<<"TEMP = "<<TEMP<<"\n\n";
        } 
        //функция установки значения
        void TempSet(int T){
            TEMP=T;
        }
};
// Класс, реализующий умный указатель
class SmartPointer 
{
    // Инкапсулированный указатель
    Temp*ptr;
    //счётчик копий 
    int count_copy;
 
public:
    //конструктор
    SmartPointer (Temp*p=NULL){
        //записываем 0 при создании копий нет
        count_copy=0;
        ptr=p;
    }
    // конструктор копирования
    SmartPointer (const SmartPointer&obj){
        //создается копия - увеличиваем счётчик
        ptr=obj.ptr;
        count_copy++;       
    }
    //перегрузка оператора равно
    SmartPointer operator=(const SmartPointer&obj){
        //создается копия - увеличиваем счётчик
        ptr=obj.ptr;
        ptr=obj.ptr;
        count_copy++;
        //возвращаем сам объект для ситуации a=b=c
        return *this;
    }
    // уничтожение объекта
    ~SmartPointer(){
        //если объект есть и копий нет
        if(ptr!=NULL&&count_copy==0){
            cout<<"\n~Delete Object\n";
            //уничтожаем объект
            delete[]ptr;
        }
        //в противном случае(уничтожается копия)
        else{
            //уменьшаем счётчик
            count_copy--;
            cout<<"\n~Delete Copy\n";
        }
            
    } 
    //старая добрая перегрузка селектора
    Temp* operator->(){
        return ptr;
    }
 
};
 
void main(){
    //создаем объект
    Temp*main_ptr=new Temp;
    //инициализируем этим объектом умный указатель
    [B]SmartPointer PTR(main_ptr)[/B];
    //проверяем работу умного указателя
    PTR->TempSet(100);
    PTR->TempFunction();
    // создаем копию (работа конструктора копирования)
    SmartPointer PTR2=PTR;
}
 
Результат работы программы:
// работа с объектом через умный указатель
TEMP = 100
//уничтожение копии
~Delete Copy
//уничтожение самого объекта
~Delete Object
Доброго времени суток. Подскажите пожалуйста, почему в аргументах реализации конструктора класса, указатель зануляется? Что происходит с указателем, который передается в конструктор, как аргумент, при создании объекта класса?

Заранее благодарю, за ответы и уделенное внимание.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2014, 01:18     (конструктор) SmartPointer(Temp* p = NULL)
Посмотрите здесь:

C++ NULL
C++ Не работает функция по причине temp'a. Не знаю как исправить
C++ Не работает код: m_web1.Navigate ('gidro.htm',0,0,NULL,NULL);
C++ Конструктор производного класса требует конструктор предка
Конструктор класса не видит конструктор по умолчанию другого класса C++
C++ Ошибка при создании шаблонной функции:"error C2075: temp: для инициализации массива требуются фигурные скобки"
Временные файлы папки Temp - как избежать ее удаления C++
Определить где находится папка TEMP C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
04.08.2014, 01:23     (конструктор) SmartPointer(Temp* p = NULL) #2
это аргумент по умолчания. если вызвать конструктор без аргументов, то этот аргумент и подставится (т.е. нуль), если с аргументов - то в конструктор придет этот аргумент.
Yandex
Объявления
04.08.2014, 01:23     (конструктор) SmartPointer(Temp* p = NULL)
Ответ Создать тему
Опции темы

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