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

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

Войти
Регистрация
Восстановить пароль
 
 
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 344
#1

Как по требованию вызвать дескриптора объекта? - C++

21.08.2013, 16:08. Просмотров 582. Ответов 17
Метки нет (Все метки)

Здрасти!

Подскажите пожалуйста, как вызвать дескриптор объекта myCar до сообщения "End of programm"?:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Car
{
public:
    Car() {cout << "Constructor active\n";}
    ~Car() {cout << "Destructor active\n";}
};
 
int main()
{
Car myCar;
//~myCar;
cout << "\nEnd of programm...\n";
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2013, 16:08     Как по требованию вызвать дескриптора объекта?
Посмотрите здесь:

Как вызвать метод объекта из контейнера? - C++
Есть абстрактный класс E, производный от CObject, в нем чистая виртуальная войдовская функция. Создал динамические объекты классов, которые...

Как вызвать конструктор для неизвестного объекта? - C++
Добрый вечер. Помогите мне с задачей. Хочу написать шаблонный класс вектор. И в конструкторе по умолчанию нужно прописать конструкцию...

Как вызвать прегруженный const метод для статического объекта - C++
class A { public: A() { cout &lt;&lt; &quot;A()&quot; &lt;&lt; endl; } ~A() { cout &lt;&lt; &quot;~A()&quot; &lt;&lt; endl; } void foo() { cout &lt;&lt; &quot;foo 1_1&quot;; } ...

Как вызвать другой конструктор для уже созданного объекта конструктором по умолчанию? - C++
Есть класс в котором несколько конструкторов, Мне в некоторых местах нужно создавать объекты класса с конструктором по умолчанию для...

Спрятать указатель на функцию класса в map и вызвать из другого объекта - C++
Товарищи, пишу примитивный &quot;tcp-сервер&quot;. В его задачи входит принятие соединений и получение сообщений. В зависимости от сообщения &quot;сервер&quot;...

Почему не останавливается цикл по требованию? - C++
Здравствуйте! Интересует вопрос по теме. for (int i = 2; !flag; ++i) { if (cin.get() == 'q') flag...

Выдать на печать по требованию информацию - C++
Создать файл, содержащий сведения о количестве изделий А,В,С, собранных рабочим за месяц. Структура записи имеет поля: фамилия сборщика,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 16:10     Как по требованию вызвать дескриптора объекта? #2
дескриптор - это деструктор?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
21.08.2013, 16:25     Как по требованию вызвать дескриптора объекта? #3
C++
1
2
3
4
5
6
7
8
int main()
{
    {
        Car myCar;
    }
    
    cout << "\nEnd of programm...\n";
}
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 344
21.08.2013, 18:14  [ТС]     Как по требованию вызвать дескриптора объекта? #4
Цитата Сообщение от VLK Посмотреть сообщение
дескриптор - это деструктор?
Само-собой Просто во время создание темы забил голову дескрипторами

Руками деструктор вызвать совсем никак нельзя?
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 18:22     Как по требованию вызвать дескриптора объекта? #5
C++
1
myCar.~Car();
не пробовал написать? попробуй.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.08.2013, 18:41     Как по требованию вызвать дескриптора объекта? #6
Цитата Сообщение от BESSON_off Посмотреть сообщение
Руками деструктор вызвать совсем никак нельзя?
C++
1
2
Car* obj = new Car();
delete obj;
Цитата Сообщение от VLK Посмотреть сообщение
не пробовал написать? попробуй.
ручной вызов деструктора "законный" только в случае placement new
C++
1
2
3
char buf[sizeof(Car)];
Car* obj = new (buf) Car();
obj->~Car();
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
21.08.2013, 18:47     Как по требованию вызвать дескриптора объекта? #7
Цитата Сообщение от VLK Посмотреть сообщение
не пробовал написать? попробуй.
Только тогда деструктор будет два раза вызван: до "end of program" и после. Чтобы деструктор вызвать явно и только один раз, то придется использоваться placement new:
C++
1
2
3
4
void* buffer = malloc(sizeof(Car));
Car* car = new(buffer) Car();
car->~Car(); 
free(buffer);
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 18:52     Как по требованию вызвать дескриптора объекта? #8
fasked, вызывать деструктор раньше времени нет смысла, а зачем? но если автору так хочется увидеть эту надпись, я ему дал такую возможность, и не важно что деструктор в данном случае не сработал
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
21.08.2013, 19:03     Как по требованию вызвать дескриптора объекта? #9
Чотоб посмотреть, как вызовется деструктор, создай функцию demo(), в ней переменную типа Car. Потом из main вызови demo()...
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,061
Записей в блоге: 3
Завершенные тесты: 1
21.08.2013, 19:13     Как по требованию вызвать дескриптора объекта? #10
Цитата Сообщение от VLK Посмотреть сообщение
вызывать деструктор раньше времени нет смысла, а зачем?
Например, для ручного управления памятью
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 19:21     Как по требованию вызвать дескриптора объекта? #11
Croessmah,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Car
{
public:
    Car() {cout << "Constructor active\n";}
    ~Car() {cout << "Destructor active\n";}
};
 
int main()
{
Car myCar;
 
myCar.~Car();
 
cout << "\nEnd of programm...\n";
return 0;
}
после выполнения строчки 12 объект myCar будет уничтожен или нет?
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
21.08.2013, 20:54     Как по требованию вызвать дескриптора объекта? #12
Цитата Сообщение от VLK Посмотреть сообщение
Croessmah,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Car
{
public:
    Car() {cout << "Constructor active\n";}
    ~Car() {cout << "Destructor active\n";}
};
 
int main()
{
Car myCar;
 
myCar.~Car();
 
cout << "\nEnd of programm...\n";
return 0;
}
после выполнения строчки 12 объект myCar будет уничтожен или нет?
После выполнения строчки 12, будет вызван деструктор объекта, объект никуда не денется.
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 21:23     Как по требованию вызвать дескриптора объекта? #13
Hugra, тогда о какой:

Цитата Сообщение от Croessmah Посмотреть сообщение
Например, для ручного управления памятью

идет речь, если объект ни куда не девается.

PS речь идет о конкретном примере, создание динамических объектов, которые буду действительно удалены, это уже совсем другой разговор.
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 344
22.08.2013, 16:59  [ТС]     Как по требованию вызвать дескриптора объекта? #14
Цитата Сообщение от VLK Посмотреть сообщение
myCar.~Car();
В этом случае деструктор 2 раза вызывается... почему то...

Цитата Сообщение от VLK Посмотреть сообщение
идет речь, если объект ни куда не девается.
Идет речь именно о ручном управлении памятью. Этот пример приведен для упрощения вопроса. У меня создаются несколько достаточно больших объектов и хотелось бы удалять их из памяти до завершения основной программы. Внесение этих объектов в блок - не решение. Хотелось бы именно вызвать руками деструктор.

Цитата Сообщение от Jupiter Посмотреть сообщение
ручной вызов деструктора "законный" только в случае placement new
Не увидел это сообщение. Видимо это так и есть... буду пользоваться указателями. Спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 17:02     Как по требованию вызвать дескриптора объекта?
Еще ссылки по теме:

Наследование дескриптора семафора другими процессами - C++
Доброго времени суток, проблема в следующем: пишу приложение, которое использует семафоры. Мне нужно, чтобы дескриптор семафора мог...

Передача дескриптора текущего процесса через mailslot - C++
Пытаюсь передать дескриптор текущего процесса и его ID через mailslot. ID проходит норм, сами сообщения &quot;ID процесса&quot; и &quot;Дескриптор&quot; тоже...

как вызвать конструктор? - C++
class t_figure { protected: int m_hor; // цифра по горизонтали char m_vert; // буква по вертикали int m_color; // цвет... ...

Как вызвать функцию? - C++
У меня допустим есть уже готовые функции с именами от а0 до а1000 а мне нужно чтобы прога исходя из входных данных сама высчитала...

как вызвать методу? - C++
привет всем! у меня вот такая проблема, я новичок в Си. Не могли бы вы мне помочь с одной программой, она находится здесь...


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

Или воспользуйтесь поиском по форуму:
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
22.08.2013, 17:02     Как по требованию вызвать дескриптора объекта? #15
Цитата Сообщение от BESSON_off Посмотреть сообщение
В этом случае деструктор 2 раза вызывается... почему то...


Идет речь именно о ручном управлении памятью. Этот пример приведен для упрощения вопроса. У меня создаются несколько достаточно больших объектов и хотелось бы удалять их из памяти до завершения основной программы. Внесение этих объектов в блок - не решение. Хотелось бы именно вызвать руками деструктор.
Выделяйте память динамически, потому применяйте delete для освобождения выделенной памяти.
Yandex
Объявления
22.08.2013, 17:02     Как по требованию вызвать дескриптора объекта?
Ответ Создать тему
Опции темы

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