сорри за тупой вопрос, но MSDN что-то не хочет давать пояснений по субжу, учебник по C++ тоже неособо....
В общем — есть код — что-то типа
void* testvar = new wxString();
....
....
чего-то делаем c testvar
....
....
delete testvar;
При компиляции этого в gcc — выводится такой варнинг:
MhbFile.cpp:40: warning: deleting `void*' is undefined
Собсно вопрос — можно ли так удалять void*-ы и не будет ли при этом утечек памяти?
wxString — класс. В том же самом коде тот же testvar может указывать на переменные других типов (на самом деле void* объявляется при объявлении класса, а new выполняется в коде класса — смотря в каком методе — разный тип, а в деструкторе класса это все надо бы чистить...)
S>MhbFile.cpp:40: warning: deleting `void*' is undefined
S>Собсно вопрос — можно ли так удалять void*-ы и не будет ли при этом утечек памяти?
S>wxString — класс. В том же самом коде тот же testvar может указывать на переменные других типов (на самом деле void* объявляется при объявлении класса, а new выполняется в коде класса — смотря в каком методе — разный тип, а в деструкторе класса это все надо бы чистить...)
Он тебе мягко и непринужденно говорит
Память то я суть покиляю эти самые 4 байта, но вот
кто вызовет деструктор для твоего класса
М>Он тебе мягко и непринужденно говорит М>Память то я суть покиляю эти самые 4 байта, но вот М>кто вызовет деструктор для твоего класса
а если там не класс а что-то типа double или bool? Эта память освобождается простым delete и достаточно особо позаботиться только о ситуации когда void* указывает на объект класса?
Здравствуйте, Sagrer, Вы писали:
М>>Он тебе мягко и непринужденно говорит М>>Память то я суть покиляю эти самые 4 байта, но вот М>>кто вызовет деструктор для твоего класса
S>а если там не класс а что-то типа double или bool? Эта память освобождается простым delete и достаточно особо позаботиться только о ситуации когда void* указывает на объект класса?
Здравствуйте, Sagrer, Вы писали:
М>>Он тебе мягко и непринужденно говорит М>>Память то я суть покиляю эти самые 4 байта, но вот М>>кто вызовет деструктор для твоего класса
S>а если там не класс а что-то типа double или bool? Эта память освобождается простым delete и достаточно особо позаботиться только о ситуации когда void* указывает на объект класса?
Что бы убить реальный объект, нужно
знать его тип.
Дабол чар или что — то еще.
Деструктор в данном случае не определен.
Освободится только 4 байта
Здравствуйте, Sagrer, Вы писали:
S>void* testvar = new wxString(); S>.... S>.... S>чего-то делаем c testvar S>.... S>.... S>delete testvar;
S>При компиляции этого в gcc — выводится такой варнинг:
S>MhbFile.cpp:40: warning: deleting `void*' is undefined
S>Собсно вопрос — можно ли так удалять void*-ы и не будет ли при этом утечек памяти?
S>wxString — класс. В том же самом коде тот же testvar может указывать на переменные других типов (на самом деле void* объявляется при объявлении класса, а new выполняется в коде класса — смотря в каком методе — разный тип, а в деструкторе класса это все надо бы чистить...)
Здравствуйте, last_hardcoder, Вы писали:
S>>void* testvar = new wxString();
S>>delete testvar;
S>>wxString — класс. В том же самом коде тот же testvar может указывать на переменные других типов (на самом деле void* объявляется при объявлении класса, а new выполняется в коде класса — смотря в каком методе — разный тип, а в деструкторе класса это все надо бы чистить...)
_>delete static_cast<wxString*>(testvar);
Все — таки безопаснее наверное прикрутить обычное наследование?