3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
1

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

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

Author24 — интернет-сервис помощи студентам
Здрасти!

Подскажите пожалуйста, как вызвать дескриптор объекта 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2013, 16:08
Ответы с готовыми решениями:

Как вызвать функцию объекта Parent из вложенного объекта
Уважаемые эксперты. Подскажите пожалуйста как решить проблему. Есть несколько пользовательских...

Как из дочернего объекта вызвать метод объекта родителя
Всем доброго времени суток, товарищи! Такой вопрос, как из дочернего объекта вызвать метод...

Невозможно вызвать Invoke ... до завершения создания дескриптора окна
Прошу помощи. Собрал вот такой код. Но при запуске ошибка &quot;невозможно вызвать invoke или...

Потоки. Нельзя вызвать Invoke до создания дескриптора окна
MainPanel SP = new MainPanel(); //окно с чартом OneCharting chartI =new OneCharting(); ...

17
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
21.08.2013, 16:10 2
дескриптор - это деструктор?
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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";
}
0
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
21.08.2013, 18:14  [ТС] 4
Цитата Сообщение от VLK Посмотреть сообщение
дескриптор - это деструктор?
Само-собой Просто во время создание темы забил голову дескрипторами

Руками деструктор вызвать совсем никак нельзя?
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
21.08.2013, 18:22 5
C++
1
myCar.~Car();
не пробовал написать? попробуй.
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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();
1
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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);
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
21.08.2013, 18:52 8
fasked, вызывать деструктор раньше времени нет смысла, а зачем? но если автору так хочется увидеть эту надпись, я ему дал такую возможность, и не важно что деструктор в данном случае не сработал
0
2662 / 2237 / 240
Регистрация: 03.07.2012
Сообщений: 8,138
Записей в блоге: 1
21.08.2013, 19:03 9
Чотоб посмотреть, как вызовется деструктор, создай функцию demo(), в ней переменную типа Car. Потом из main вызови demo()...
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
21.08.2013, 19:13 10
Цитата Сообщение от VLK Посмотреть сообщение
вызывать деструктор раньше времени нет смысла, а зачем?
Например, для ручного управления памятью
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
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 будет уничтожен или нет?
0
50 / 50 / 9
Регистрация: 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, будет вызван деструктор объекта, объект никуда не денется.
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
21.08.2013, 21:23 13
Hugra, тогда о какой:

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

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

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

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

Цитата Сообщение от Jupiter Посмотреть сообщение
ручной вызов деструктора "законный" только в случае placement new
Не увидел это сообщение. Видимо это так и есть... буду пользоваться указателями. Спасибо
0
50 / 50 / 9
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
22.08.2013, 17:02 15
Цитата Сообщение от BESSON_off Посмотреть сообщение
В этом случае деструктор 2 раза вызывается... почему то...


Идет речь именно о ручном управлении памятью. Этот пример приведен для упрощения вопроса. У меня создаются несколько достаточно больших объектов и хотелось бы удалять их из памяти до завершения основной программы. Внесение этих объектов в блок - не решение. Хотелось бы именно вызвать руками деструктор.
Выделяйте память динамически, потому применяйте delete для освобождения выделенной памяти.
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
22.08.2013, 17:50 16
BESSON_off, надо было еще в первом сообщении писать об управлении памятью.

тогда как было сказано надо использовать динамические объекты, т.е.:

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 = new Car; // оператор new выделяет память под объект
delete myCar; // это будет за место - ~myCar(); оператор delete удаляет объект, высвобождает память
cout << "\nEnd of programm...\n";
return 0;
}
0
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
22.08.2013, 20:24  [ТС] 17
Стати
Цитата Сообщение от VLK Посмотреть сообщение
надо было еще в первом сообщении писать об управлении памятью.
тогда как было сказано надо использовать динамические объекты
Не надо было, мне нужно именно статически выделенную память очистить, сформулировано все было правильно (за исключением "дескриптор" )
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
22.08.2013, 20:30 18
BESSON_off, статически выделенную память можно очистить только выйдя из программы.
0
22.08.2013, 20:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2013, 20:30
Помогаю со студенческими работами здесь

Невозможно вызвать Invoke до завершения создания дескриптора окна
При нажатии на кнопку загружается список из ms sql и отображается в grid. Загрузка и отображение...

Invoke - невозможно вызвать до завершения создания дескриптора окна
В прикрепленном проекте из клиента пытаюсь обратиться к серверу через библиотеку - возникает...

Невозможно вызвать Invoke или BeginInvoke для элемента управления до завершения создания дескриптора окна.
Помогите исправить ошибку Invoke(new MethodInvoker(InvokedConnectionStateChange)); // Ошибка:...

Невозможно вызвать Invoke или BeginInvoke для элемента управления до завершения создания дескриптора окна
Всем привет. Написал класс для загрузки файлов, подключил его к главной форме, нажимаю загрузить, а...


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

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

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