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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Vivek
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 5
18.07.2012, 11:15     Требуется ли при удалении объекта посредством delete указывать тип объекта? #1
например, есть указатели
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, если это важно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 11:15     Требуется ли при удалении объекта посредством delete указывать тип объекта?
Посмотрите здесь:

Как правильно вызывать функцию объекта из другой функции того же объекта? C++
C++ Ошибка при удалении массива с помощью delete
При возврате объекта из функции пишет, что для объекта не определен констуктор копирования C++
C++ Передача объекта методу другого объекта другого класса
Как изменить тип объекта, на который указывает указатель? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kent
Нуб со стажем
 Аватар для kent
36 / 34 / 2
Регистрация: 19.02.2012
Сообщений: 118
18.07.2012, 11:20     Требуется ли при удалении объекта посредством delete указывать тип объекта? #2
Нет, не нужно
Vivek
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 5
18.07.2012, 11:32  [ТС]     Требуется ли при удалении объекта посредством delete указывать тип объекта? #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;
}
Если убрать приведение типа, не вызывается деструктор класса.
Но все равно спасибо за комментарий.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
18.07.2012, 12:03     Требуется ли при удалении объекта посредством delete указывать тип объекта? #4
Все вызывается. Ничего не нужно приводить. Да и какой смысл приводить указатель к своему же типу.

ADD: не увидел, что указатель указывает на тип void. Тогда естественно нужно приведение типа. Только зачем использовать такие указатели.
Vivek
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 5
18.07.2012, 12:05  [ТС]     Требуется ли при удалении объекта посредством delete указывать тип объекта? #5
Цитата Сообщение от Toshkarik Посмотреть сообщение
Все вызывается. Ничего не нужно приводить. Да и какой смысл приводить указатель к своему же типу.
Обратите внимание, тип указателя - void*
Yandex
Объявления
18.07.2012, 12:05     Требуется ли при удалении объекта посредством delete указывать тип объекта?
Ответ Создать тему
Опции темы

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