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

Конструктор инициализации, конструктор копирования, деструктор - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Составить и отладить резидентную программу часы (C++) http://www.cyberforum.ru/cpp-beginners/thread823386.html
Составить и отладить резидентную программу часы, которая выдает в нижнем левом углу экрана текущее значение времени в числовой форме. помогите!
C++ Повторное выполнение цикла #include <stdio.h> #include <conio.h> #include <locale.h> #include <iostream> int main() { setlocale(LC_ALL, "rus"); int n,m,**mas, j,i,k; puts("Введите N:"); http://www.cyberforum.ru/cpp-beginners/thread823356.html
Перерыв цикла C++
Как сделать чтоб при некой ситуации(некая переменная == 0) даная итерация цикла(while(true)) прервалась, и началась следущая?
Поменять слова местами C++
Задача такая: Поменять слова в сообщении по принципу: первое с n/2+1 словом, второе с n/2+2 словом, i-тое с n/2+i словом и т.д (n-число слов в предложении). (тема: строки) Алгоритм по сути простой но у меня возникли трудности с его реализацией. Вот как я его себе представляю: Нужно в цикле из строки сделать массив слов: 1. Найти первое вхождение пробела и запомнить его позицию. 2....
C++ Ах, эти указатели http://www.cyberforum.ru/cpp-beginners/thread823331.html
Начал изучать С++ и тут наткнулся на недопонимание. Операция new резервирует место в куче, необходимое для хранения значения этого типа. т.е. правильно делать так. float* pf; pf = new float(0); //дальше что-то делаем с переменной. *pf = 3.14; cout << *pf << endl;
C++ Откомпилировать Здаствуйте:) Можете откомпилировать программу и выслать файл PSDP В строке "vvedite razmer PSDP v megobaitah" введите "1". Заранее огромное спасибо! #include<stdio.h> #include<iostream> #include<conio.h> #include<math.h> #include<string.h> подробнее

Показать сообщение отдельно
sashadereh
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 63
04.01.2014, 02:14     Конструктор инициализации, конструктор копирования, деструктор
supra7sky, Tulosba, пардон, возможно не правильно выразился. Да, действительно, нам нет нужды вызывать деструкторы явным образом
C++
1
obj.~myclass();
потому как компилятор вызывает их неявно.

Но в этом случае:
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
class A
{
public:
    A()
    {
        std::cout<<"\nConstructor\n";
 
        arr = new double[100];
    }
    ~A() 
    {
        std::cout<<"\nDestructor\n";
 
        delete[] arr;
    }
private:
    double *arr;
};
 
int main(int argc, char **argv)
{
    A a;
 
    return 0;
}
красиво будет сказать, что деструктор будет вызван автоматически, а в этом:
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
class A
{
public:
    A()
    {
        std::cout<<"\nConstructor\n";
 
        arr = new double[100];
    }
    ~A() 
    {
        std::cout<<"\nDestructor\n";
 
        delete[] arr;
    }
private:
    double *arr;
};
 
int main(int argc, char **argv)
{
    A *a = new A;
 
    return 0;
}
так сказать будет некрасиво, потому как деструктор в этом конкретном случае вызван не будет. Да, изменив main
C++
1
2
3
4
5
6
7
8
int main(int argc, char **argv)
{
    A *a = new A;
 
        delete a;
 
    return 0;
}
мы решим проблему утечки памяти. Опять же, теоретически, деструктор вызван "автоматически", потому как так
C++
1
a.~A();
мы не писали, но практически, думаю понятно, что в случае динамического выделеления мы обязаны (умные указатели, само собой, в данном контексте не рассматриваем) "вызывать" деструкторы неявным образом с помощью delete, когда объект становится не нужен.

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