class Cbase
{
public:
virtual ~Cbase(){};
int k;
};
class Cchild:public Cbase
{
public:
~Cchild(){};
double *p;
int f;
};
Есть у меня два класса, полагаю что экземпляр следующего поколения ( base - child - child2 - ...), занимает в памяти все больше места. Оператору New, мы точно говорим сколько выделить памяти, передавая класс в параметрах. Но в оператору delete, ничего о том, сколько нужно удалять, мы не говорим. Исходя из этих размышлений не совсем ясно что будет в следующей ситуации:
Т.е. я о том, что мы объявили *pClass как указатель на Cbase (маленький класс по сравнению с Cchild), но фактически он указывает на Cchild. От сюда вопрос, как поведет себя delete()? Освободит количество байт равное размеру Cbase (тогда память будет засоряться), или удаление произойдет правильно?
P.S: ну за одно по вопрос по теме: существует ли в выделенном участке памяти (new) какая то метка, при помощи которой можно понять размер этого участка (что-то вроде того как хранится char с нуль-терминатором в конце)? Или другими словами, сможет ли участок кода ничего не знающий о том какие размеры у объявленных мною классов корректно освободить память?
От сюда вопрос, как поведет себя delete()? Освободит количество байт равное размеру Cbase (тогда память будет засоряться), или удаление произойдет правильно?
конечно же удалит правильно. можете брикпоинты раскидать по деструкторам
P.S: ну за одно по вопрос по теме: существует ли в выделенном участке памяти (new) какая то метка, при помощи которой можно понять размер этого участка (что-то вроде того как хранится char с нуль-терминатором в конце)? Или другими словами, сможет ли участок кода ничего не знающий о том какие размеры у объявленных мною классов корректно освободить память?
конечно же удалит правильно. можете брикпоинты раскидать по деструкторам
У этого вопроса ноги примерно оттуда и растут. Сделал примерно так как описал (деструктор был не виртуальный), и деструкторы ниже класса-указателя не вызывались.
Я думаю что sizeof работает на этапе компиляции, а я говорю об освобождении памяти например из другого процесса. Если это возможно, тогда думаю станет понятна работа функции delete.
Задачка... Приложите пожалуйста модуль сигнала (у меня такого нет). Будем посмотреть.
Ещё более странно. У меня эффект не воспроизводится.
эффект только при инициализации, в тестере все нормально
ну ладно, не надо ковырять, мне это особо не нужно
С индикатора Зигзаг считывает значения,которых уже нет (наверное были до перерисовки).Этого можно избежать?
Если значения есть в буфере ,то почему не рисует опять же...
Добрый день, просба объяснить следующее:
Есть у меня два класса, полагаю что экземпляр следующего поколения ( base - child - child2 - ...), занимает в памяти все больше места. Оператору New, мы точно говорим сколько выделить памяти, передавая класс в параметрах. Но в оператору delete, ничего о том, сколько нужно удалять, мы не говорим. Исходя из этих размышлений не совсем ясно что будет в следующей ситуации:
Т.е. я о том, что мы объявили *pClass как указатель на Cbase (маленький класс по сравнению с Cchild), но фактически он указывает на Cchild. От сюда вопрос, как поведет себя delete()? Освободит количество байт равное размеру Cbase (тогда память будет засоряться), или удаление произойдет правильно?
P.S: ну за одно по вопрос по теме: существует ли в выделенном участке памяти (new) какая то метка, при помощи которой можно понять размер этого участка (что-то вроде того как хранится char с нуль-терминатором в конце)? Или другими словами, сможет ли участок кода ничего не знающий о том какие размеры у объявленных мною классов корректно освободить память?
220Volt:
От сюда вопрос, как поведет себя delete()? Освободит количество байт равное размеру Cbase (тогда память будет засоряться), или удаление произойдет правильно?
конечно же удалит правильно. можете брикпоинты раскидать по деструкторам
P.S: ну за одно по вопрос по теме: существует ли в выделенном участке памяти (new) какая то метка, при помощи которой можно понять размер этого участка (что-то вроде того как хранится char с нуль-терминатором в конце)? Или другими словами, сможет ли участок кода ничего не знающий о том какие размеры у объявленных мною классов корректно освободить память?
конечно же удалит правильно. можете брикпоинты раскидать по деструкторам
sizeof ?