Closed GoogleCodeExporter closed 9 years ago
Я переименовал папку с Вашим заданием. Так
что, перед тем, как что-либо дальше локально
делать, прошу вызвать svn update.
Original comment by aivyu...@gmail.com
on 6 Apr 2013 at 9:03
0. Программа не собирается:
Vector.cpp: In member function ‘void TVector<T>::insert(T*, T&)’:
Vector.cpp:100: error: expected `;' before ‘i’
Vector.cpp:100: error: ‘i’ was not declared in this scope
Vector.cpp: In member function ‘void TVector<T>::resize() [with T = int]’:
Vector.cpp:54: instantiated from ‘void TVector<T>::pushback(T) [with T =
int]’
Vector.cpp:118: instantiated from here
Vector.cpp:64: warning: comparison between signed and unsigned integer
expressions
1. Не вижу тестов. В том числе, не вижу тестов
на утечки памяти.
2. Вы именуете методы то с большой буквы, то
с маленькой. Придерживайтесь единого стиля
кода в пределах файла.
3. Методы Size(), empty(), Capacity(), begin(), end()
невозможно вызвать у константного вектора.
4. Не реализованы конструктор копирования и
оператор копирующего присваивания. При
этом они не скрыты в private, значит компилятор
генерирует их по умолчанию. Их поведение по
умолчанию осуществляет неглубокое
копирования, что приведет к утечке памяти.
4.1: Вопрос: объясните, чем отличается глубокое копирование от неглубокого.
4.2: Вопрос: почему описанная в пункте 4 проблема приводит к утечке памяти? Приведите пример кода с утечкой.
5. resize должен принимать желаемый размер
вектора
reserve - желаемый размер внутреннего буфера (у
Вас он вообще принимает T&, что нелогично)
Напоминаю, что согласно заданию нужно
реализовать поведение классов как у
соответствующих контейнеров STL.
Внимательно читайте документацию:
http://cplusplus.com/reference/vector/vector/resize/?kw=vector%3A%3Aresize
http://cplusplus.com/reference/vector/vector/reserve/?kw=vector%3A%3Areserve
6. В swap какой-то бред. Вы вообще проверяли,
что он работает? Что должно быть:
http://cplusplus.com/reference/vector/vector/swap/?kw=vector%3A%3Aswap
Решение не принято.
Original comment by aivyu...@gmail.com
on 6 Apr 2013 at 9:13
ответ на 4 вопрос. при неглубоком
копировании перенаправляются указатели,
поэтому не освобождается память,
содержащая данные, на которые ранее
указывал указатель.
какой пример?? если любой, то читайте мои
программы прошлого семестра:)
типа вот:
int main(){
int* A=new int[7];
for (int i = 0; i<7; ++i)
A[i] = i;
return 0;
}
Original comment by RMarie...@gmail.com
on 21 May 2013 at 12:36
Original comment by RMarie...@gmail.com
on 21 May 2013 at 12:36
Про глубокое/неглубокое копирование
непонятно. Что значит "перенаправляются"
указатели.
Что значит глубокое копирование?
Я Вас прошу объяснить не просто, что такое
утечка. Это итак понятно: не позвали delete.
Вопрос в другом: ПОЧЕМУ неглубокое
копирование может привести к утечки. Нужно
привести КОНКРЕТНЫЙ ПРИМЕР КОДА, в котором
это продемонстрировано.
Original comment by aivyu...@gmail.com
on 21 May 2013 at 12:42
Перенаправляются указатели - это значит,
копируется адрес, а не сами данные.
Глубокое копирование - копируются сами
данные (значения полей класса).
int main()
{
TVector<int>A;
//заполнение массива A;
TVector<int>B(A);
return 0;
}
тогда выполнится A.buf=B.buf.
так как это указатели, то получится, что на B ничего не указывает, а память выделена.
Original comment by RMarie...@gmail.com
on 21 May 2013 at 2:37
ok. Ответ принимается.
Код позже посмотрю.
Original comment by aivyu...@gmail.com
on 21 May 2013 at 2:38
1. Методы front/back возможно вызвать только у
конст объекта
2. Невозможно создать копию вектора от
констатного объекта:
const TVector<int> a;
...
TVector<int> b(a);
3. Пишу в main() код:
{
TVector<TFoo> a;
for (int i = 0; i < 10; ++i)
a.Pushback(TFoo());
TVector<TFoo> b = a;
for (int i = 0; i < 10; ++i)
b.Pushback(TFoo());
a.Swap(b);
TVector<TFoo> c;
a = c;
}
Пробую скомпилировать, получаю:
Vector.cpp: In member function ‘TVector<T>&
TVector<T>::operator=(TVector<T>&) [with T = TFoo]’:
Vector.cpp:228: instantiated from here
Vector.cpp:149: error: ‘cop->TVector<TFoo>::size’ cannot be used as a
function
Vector.cpp:150: error: ‘push_back’ was not declared in this scope
Я закоммитил этот код, так что, не забудьте
сделать svn update, прежде чем менять файл.
Решение не принято.
Original comment by aivyu...@gmail.com
on 26 May 2013 at 11:43
Original comment by RMarie...@gmail.com
on 26 May 2013 at 3:31
Решение принято.
Оценка: 0.4 балла
Original comment by aivyu...@gmail.com
on 26 May 2013 at 7:23
Original issue reported on code.google.com by
RMarie...@gmail.com
on 29 Mar 2013 at 12:29