4 / 4 / 1
Регистрация: 17.12.2015
Сообщений: 119
1

Как работает деструктор?

12.08.2016, 22:41. Показов 1149. Ответов 11
Метки нет (Все метки)

1.Деструктор вызывается когда объект удаляется?

ИЛИ

2. Сам деструктор удаляет объект?

P.s. Надеюсь понятно))
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2016, 22:41
Ответы с готовыми решениями:

Как работает деструктор и конструктор при наследовании?
Возникла проблемка, не пойму, как работает деструктор и конструктор в моей программе. Я не вызываю...

Не работает деструктор
Выписал пример из самоучителя, но выяснилось что не работает деструктор. В чем проблема? #include...

Не работает деструктор
Простой вопрос, скорее всего связано с 2019 студией. Может кто сталкивался с таким? Всё...

Не работает деструктор
Прошу помощи.Делаю лабораторную. Написал программу для подсчета суммы элементов в тех строках...

11
Каждому свое
532 / 218 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
12.08.2016, 22:49 2
Первое
1
Kastaneda
12.08.2016, 23:07
  #3

Не по теме:

Индусы тут слали тестовое задание заказчику, заказчик мне на проверку скидывал. Реально в коде видел такое

C++
1
object.~ClassName(); // delete object
:D

0
803 / 530 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.08.2016, 23:08 4
Лучший ответ Сообщение было отмечено JackLas как решение

Решение

JackLas, деструктор работает так: сперва выполняется тело деструктора, потом запускается неявная фаза удаления полей класса
1
rikimaru2013
12.08.2016, 23:12
  #5

Не по теме:

Kastaneda, я такой же код видел у Экспертов С++ :D *шутка_про_плейсмент_нью*

0
5225 / 3197 / 362
Регистрация: 12.12.2009
Сообщений: 8,101
Записей в блоге: 2
12.08.2016, 23:20 6

Не по теме:

rikimaru2013, тогда было бы через -> ;)



Добавлено через 1 минуту

Не по теме:

хотя не, не факт, можно исхитрится через точку сделать. Впрочем не важно, спать пора :)

0
Эксперт С++
8719 / 4299 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
12.08.2016, 23:24 7
Цитата Сообщение от Kastaneda Посмотреть сообщение
Индусы тут слали тестовое задание заказчику, заказчик мне на проверку скидывал. Реально в коде видел такое
обычная практика для механизмов,
которые используют new placement

http://rextester.com/JIN20669

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
#include <type_traits>
#include <iostream>
#include <string>
 
template<class T, std::size_t N> class static_vector
{
    typename std::aligned_storage<sizeof(T), alignof(T)>::type 
        data[N];
    
    std::size_t m_size = 0;
 
public:
    template<typename ...Args> void emplace_back(Args&&... args) 
    {
        if( m_size >= N ) 
            throw std::bad_alloc{};
        new(data + m_size) T(std::forward<Args>(args)...);
        ++m_size;
    }
 
    const T& operator[](std::size_t pos) const 
    {
        return *reinterpret_cast<const T*>(data+pos);
    }
 
    ~static_vector() 
    {
        for(std::size_t pos = 0; pos < m_size; ++pos) 
            reinterpret_cast<const T*>(data+pos)->~T();
        
    }
};
 
int main()
{
    static_vector<std::string, 10> v;
    v.emplace_back(5, '*');
    v.emplace_back(10, '*');
    std::cout << v[0] << '\n' << v[1] << '\n';
}
3
rikimaru2013
12.08.2016, 23:48
  #8

Не по теме:

hoggy, а почему в вашем кодинг-стайле нету переноса строки template<class T, std::size_t N> в отдельную строку на ряду с именем класса ?

0
hoggy
12.08.2016, 23:55
  #9

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
а почему в вашем кодинг-стайле нету переноса строки template<class T, std::size_t N> в отдельную строку на ряду с именем класса ?
если декларация представляет собой коротенькую строчку
(менее 80 символов),
и при этом это не мешает отладке,
то допустимо писать в одну строку с целью,
уменьшить количество строк кода.

0
rikimaru2013
13.08.2016, 00:07
  #10

Не по теме:

hoggy, вам не кажется, что это двойные стандарты и при Rename class может выйти с рамок привычного. Выражу своё мнение - читабельность падает если в одну строку

0
hoggy
13.08.2016, 00:13
  #11

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
вам не кажется, что это двойные стандарты и при Rename class может выйти с рамок привычного
не вижу никаких проблем.



Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Выражу своё мнение - читабельность падает если в одну строку
все хорошо читается если взгляду не приходится слишком далеко бегать влево/вправо.

а вот если растянутый по вертикали код перестает влезать на экран,
вот тогда уже читабельность падает

0
5225 / 3197 / 362
Регистрация: 12.12.2009
Сообщений: 8,101
Записей в блоге: 2
13.08.2016, 08:22 12
hoggy, там был совершенно другой случай, я не на столько тупой, чтобы не понять необходимость ручного вызова деструктора
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2016, 08:22
Помогаю со студенческими работами здесь

не работает деструктор
это моя первая программа..я еще не особо разобралась..обьясните почему не работает деструктор и как...

Не работает деструктор
#include &lt;iostream&gt; #include &lt;conio.h&gt; using std::cout; #pragma hdrstop #pragma argsused...

Не работает деструктор C++
Работаю в среде DEVc++ #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class...

Почему деструктор не работает?
Вроде написал все правильно, а почему то деструктор не работает, данные HI не выводит, почему ? ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru