Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > освобождение памяти


Автор: kosta 19.6.2006, 17:03
есть у меня класс, который содержит в себе как одно из полей данных вектор целых чисел

class TKlaster
{
private:
    vector <int> Ells;
    int EllNumber;
    int ElementsNumber;
    double Lambda;
. . . 

 деструктор

TKlaster::~TKlaster ()
{
Ells.clear();
}


и есть вектор этого класса -  vector <TKlaster> Klasters

при удалении вектора классов делаю вот так

for (int i=Klasters.size()-1;i>=0;i--)
    Klasters[i].~TKlaster();

Klasters.clear();


но на последней строке выдается ошибка

Clase with properties cannot be copied by value


как тогда удалить все что храниться в этом векторе, чтобы опять в него же можно было завписывать новые значения?





 

Автор: Vyacheslav 19.6.2006, 17:13
В данном случае никак не надо удалять.  Деструкторы будет вызван автоматически.
Код ошибочен и не нужен 
Код

for (int i=Klasters.size()-1;i>=0;i--)
    Klasters[i].~TKlaster();

Сообщение "Class with properties cannot be copied by value" связано совсем с другим.
 

Автор: kosta 19.6.2006, 17:21
просто мне надо при нажатии кнопки очистить вектор чтбы можно было в него опять записывать по ходу программы данные, а очистить я его не могу. вот как это сделать я и спрашиваю, потому что при написании просто Klasters.clear(); прога не компилится

Добавлено @ 17:25 
просто у меня туда завписыываються по ходу программы данные, потом при нажатии кнопки хочу сджелать Klasters.clear();
, чтобы можно было дальше при вызове Klasters.push_back(); можно было опять заносить данные, но при попытки вызвать Klasters.clear(); компилятор выдает вот ту ошибку 

Автор: Vyacheslav 19.6.2006, 17:26
Еще раз. Если Вы правильно написали сообщение об ошибке, то  ошибка связана совсем с другим.
Для очистки вектора лостаточно clear() 

Автор: kosta 19.6.2006, 17:40
я приблизительно понимаю с чем связана ошибка (как мне кажеться +) ) но если я убираю строку 

Klasters.clear();

 то ошибка не появляется, правда потом естесно выходят траблы с данными 

Автор: Vyacheslav 19.6.2006, 17:43
Вы property используете в Ваших классах?  

Автор: Fazil6 19.6.2006, 17:45
константные члены есть в классе TKlaster?
конструктор копии у тебя есть в TKlaster?

Добавлено @ 17:47 
а вообще здесь напрашивается vector <TKlaster*> Klasters
с созданием через new и удалением delete перед Klastersю.clear() 

Автор: kosta 19.6.2006, 17:55
проперти в классе есть
констант нет 

Автор: Vyacheslav 19.6.2006, 18:10
Ну так в чем вопрос тогда? В переводе на русский?

Class with properties cannot be copied by value

Class  с пропертями не может быть скопировван по значению

А эту операцию очень часто использует вектор.

Добавлено @ 18:16 
Попробуй определить копирующий конструктор и оператор копирования 

Автор: kosta 19.6.2006, 18:41
если чесна то про копирующий конструктор недопонял , что ето такое и с чем его едят ...  smile  

Автор: Fazil6 19.6.2006, 21:33
Цитата

если чесна то про копирующий конструктор недопонял , что ето такое и с чем его едят ... 

упс... А как ты на С++ пишешь, да еще с stl и не знаешь что это такое? 
1. Почитай книжку на тему конструкторов, их видов и operator = 
2. Ссылки
3. В данном конкретном примере проще и намного эфективнее использовать хранение не объектов в векторе, а указателей 

Автор: kosta 19.6.2006, 23:28
конкретно про конструкторы и переопределение операций я знаю, просто не встречался по работе с копирующими конструкторами как таковыми, терь уже почитал и понял, что надо делать вктор указателей. Спасибо всем за помощь 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)