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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Vivek
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 5
#1

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

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

C++ Ошибка при удалении массива с помощью delete
Удаление памяти посредством delete[] C++
Как изменить тип объекта, на который указывает указатель? C++
Узнать тип объекта передаваемого по ссылке C++
C++ Undefined reference при создании объекта
C++ Ошибка с delete при удалении памяти из-под строки
Для агрегатного объекта требуется инициализация с использованием "{.}" C++
Ошибка при создание объекта C++
C++ Ккк определить тип объекта класса vector
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 / 51
Регистрация: 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 указывать тип объекта?
Ответ Создать тему
Опции темы

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