Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 5
1

Требуется ли при удалении объекта посредством delete указывать тип объекта?

18.07.2012, 11:15. Просмотров 1456. Ответов 4
Метки нет (Все метки)

например, есть указатели
C++
1
2
void *p1; 
void *p2;
есть VCL-объект TButton, есть самописный класс TMyClass;
создаются объекты
C++
1
2
p1=new TButton(NULL); 
p2=new TMyClass();
нужно ли для корректного удаления этих объектов выполнять явное приведение типа?
т.е. являются ли корректными записи
C++
1
2
delete p1; 
delete p2;
или обязательно нужно
C++
1
2
delete (TButton*)p1; 
delete (TMyClass*)p2;
Среда RAD Studio XE под Win7, если это важно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2012, 11:15
Ответы с готовыми решениями:

Ошибка при удалении объекта
Здравствуйте, создаю объекты класса и укладываю в массив. После энного времени объект должен...

Ошибка при удалении объекта с Form
Ребят,всем халло. Такая трабла. Я пишу на паскале давно, решил заюзать Delphi XE7. Вообщем,при...

Ошибка при удалении объекта Клиента
Доброго времени суток, уважаемые программисты! Бьюсь с проблемой уже продолжительное время -...

Ошибка при удалении динамическисозданого объекта.
Вот создаю панель (TPanal) на форме и удаляю. На панели кнопка, при нажатии которой должна удалится...

4
Нуб со стажем
36 / 34 / 10
Регистрация: 19.02.2012
Сообщений: 118
18.07.2012, 11:20 2
Нет, не нужно
1
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 5
18.07.2012, 11:32  [ТС] 3
Опосля пришла мысль, что я и сам это могу проверить. Указывать класс нужно. Простой пример:
Форма с одной кнопкой, самописный класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class TMyClass
{
    public:
    TMyClass();
    ~TMyClass();
};
TMyClass::TMyClass()
{
    int i=1;
}
TMyClass::~TMyClass()
{
    Application->ShowMessage("OK");
}
Код кнопки:
C++
1
2
3
4
5
{
    void *p;
    p=new TMyClass();
    delete (TMyClass*)p;
}
Если убрать приведение типа, не вызывается деструктор класса.
Но все равно спасибо за комментарий.
0
1172 / 885 / 94
Регистрация: 03.08.2011
Сообщений: 2,455
18.07.2012, 12:03 4
Все вызывается. Ничего не нужно приводить. Да и какой смысл приводить указатель к своему же типу.

ADD: не увидел, что указатель указывает на тип void. Тогда естественно нужно приведение типа. Только зачем использовать такие указатели.
0
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 5
18.07.2012, 12:05  [ТС] 5
Цитата Сообщение от Toshkarik Посмотреть сообщение
Все вызывается. Ничего не нужно приводить. Да и какой смысл приводить указатель к своему же типу.
Обратите внимание, тип указателя - void*
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2012, 12:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Очистка памяти при удалении из QList объекта-указателя
Приветствую! Есть класс Player у которого есть свойство death. Объекты класса Player в цикле...

Очистка памяти при удалении из контейнера объекта-указателя
С Наступившими всех! Подскажите пожалуйста, как очистить память на которую ссылается указатель,...

Создание объекта зная тип другого объекта
К примеру, у меня есть абстрактный класс Abs, от которого унаследован класс Class1 У меня есть...

Почему закрывается окно объекта OLE при открытии другого объекта?
Добрый день! Есть таблица, одно из полей которой - Поле объекта OLE. При двойном нажатии...

В экземпляре объекта не задана ссылка на объект при динамическом создании объекта
Выдается ошибка NullReferenceException в private void button2_Click(object sender,...

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


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

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

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