Re: set.clear() освободится ли статическаая память
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 08.01.09 10:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Eсть код:

class unique {
    // Эта память будет размещена в объекте
    char buff[20]; // эта память будет размещена в стёке?
    unique(char *p) { ... }
    //...
};

//Это типа глобальный объект
set<unique> s;

int main ()
{
    // А это, типа, локальный объект
    set<unique> s;
    s.insert("zxc");
    /// ...
    s.clear();
}// В этой точке у тебя разрушится локальный объект

//А глобальный s будет разрушен внутри "системного" кода завершения работы программы


А>после того как отработали с сетом и вызвали clear() статическая память освободится и будет использованна другими частами программы или нет?

А>Или лучше определить set в процедуре и по завершению её память освободится.

Когда вызывается std::set::clear разрушает объекты, хранящиеся в множестве (то есть вызывает ~unique). Память под эти объекты, он может не освобождать — повторно заюзает потом. Память он освободит в своем деструкторе std::set::~set. Этот деструктор вызовется автоматом.

Из приведенного кода, беспокоится об освобождении unique::buff не надо. Все будет освобождено автоматически.

Непонятно — зачем у тебя два объекта s. Один локальный, другой глобальный.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.