Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 | ||
В данном случае никак не надо удалять. Деструкторы будет вызван автоматически. Код ошибочен и не нужен
Сообщение "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 |
если чесна то про копирующий конструктор недопонял , что ето такое и с чем его едят ... ![]() |
Автор: Fazil6 19.6.2006, 21:33 | ||
упс... А как ты на С++ пишешь, да еще с stl и не знаешь что это такое? 1. Почитай книжку на тему конструкторов, их видов и operator = 2. Ссылки 3. В данном конкретном примере проще и намного эфективнее использовать хранение не объектов в векторе, а указателей |
Автор: kosta 19.6.2006, 23:28 |
конкретно про конструкторы и переопределение операций я знаю, просто не встречался по работе с копирующими конструкторами как таковыми, терь уже почитал и понял, что надо делать вктор указателей. Спасибо всем за помощь |