Обнуление указателя в структуре
Возник вопрос.
Имеется следующая структура:
struct srtPrimer{
int IntVal;
String* StringVal;
};
Как работает memset если в структуре имеется String представляющий собой объект? Очищаются ли данные хранящиеся по указателю?
И что будет если вместо указателя на строку будет указатель на какой либо объект?
Попробовал подставить вместо строки указатель на объект, то при выполнении кода
struct srtPrimer{
int IntVal;
MyClass* ClassVal;
};
srtPrimer Buf;
memset(&Buf, 0, sizeof(srtPrimer));
Деструктор для ClassVal не вызывается...
Может ли использование memset вызвать утечки памяти для таких структур.
Память под структуру просто забъется нулями. Указатель на строку будет равен нулю. Деструктор не вызовется. Память утечет (если до этого была выделена где то в другом месте).
Я так понимаю что String сам выделяет себе память под символы строки, то как memset знает сколько памяти сейчас выделено в String?
struct srtPrimer{
int IntVal;
String StringVal;
};
Выделяется память не под строку а под объект класса "строка". Все что этот объект захватит из памяти будет заполнено нулями, что не есть хорошо, ибо может быть внутри какая инициализация указателей, которые при обнулении тоже превратятся в ноль.
Для удаления объектов memset использовать нельзя.
При заполненении нулями String-а, сами символы где-то останутся, но будет утеряна память о их местонахождении ;)