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

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

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

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

18.07.2012, 11:15. Просмотров 1179. Ответов 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 - C++
Изучаю C++ и у меня задание разбить текст неопределенной длинны на массив строк. Нацарапал класс типа string ниже выложу. В него задача...

Ошибка с delete при удалении памяти из-под строки - C++
strngbad.h // strngbad.h -- flawed string class definition #include <iostream> #ifndef STRNGBAD_H_ #define STRNGBAD_H_ class...

Узнать тип объекта передаваемого по ссылке - C++
Есть класс А, класс В наследник, в классе С в методе будет приходить объект по ссылке на базовый класс, как узнать к какому классу он...

Создание объекта в функции и возврат объекта из нее - C++
Не могу разобраться с ссылками. Возможно ли вернуть из функции объект созданный в стеке при этом копи конструктор публичный. ...

Вывод данных вложенного объекта из другого объекта - C++
Добрый День! Хочу в одном объекте вывести текст который находится во вложенном объекте. Помогите ,пожалуйста, понять в чем ошибка. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
18.07.2012, 12:03     Требуется ли при удалении объекта посредством delete указывать тип объекта? #4
Все вызывается. Ничего не нужно приводить. Да и какой смысл приводить указатель к своему же типу.

ADD: не увидел, что указатель указывает на тип void. Тогда естественно нужно приведение типа. Только зачем использовать такие указатели.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2012, 12:05     Требуется ли при удалении объекта посредством delete указывать тип объекта?
Еще ссылки по теме:

Ккк определить тип объекта класса vector - C++
Функция change_val() возвращает итератор vector<int> и получает два параметра: один типа int, а второй для вектора vector<int> - это задача...

Как изменить тип объекта, на который указывает указатель? - C++
Есть абстрактный базовый класс и два производных: class Base { protected: int A; }; class Child1 : public Base {

Как определить тип объекта из таблицы виртуальных методов? - C++
Как можно определить тип объекта из таблицы виртуальных методов? Необходимо сравнить типы, не используя typeid, а также dynamic_cast.

Ошибка:выражение должно представлять собой указатель на полный тип объекта - C++
Доброго времени суток! Простенький код, но не получается. using namespace std; #include<iostream> int main() { int c1; ...

Передача объекта методу другого объекта другого класса - C++
Всем привет. Есть у меня класс test1, который имеет конструкторы только с параметрами. Другой класс test2 имеет конструктор, который...

Удаление памяти посредством delete[] - C++
Добрый день! Столкнулся с проблемой: при удалении выделенной памяти, программа зависает, будто не способна выполнить данный оператор....


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

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

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