вектор - проблема
вектор - проблема
Wild Bill, любимых Вами шаблонов не заметил
Последний раз редактировалось NT 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
вектор - проблема
2 Munin
Видно забывать уже стал...
2 N T
Например, так
Видно забывать уже стал...
2 N T
Например, так
Код: Выбрать все
template<class X> class Vector{
X* v;
int size;
public:
Vector();
Vector(int);
X& operator[] (int i)
};
template<class X> X Vector<X>::Vector(int N)
{
v = new X [N];
};
Последний раз редактировалось Wild Bill 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
вектор - проблема
Поправочка:
template<class X>X Vector<X>::Vector(int N)
{
v = new X [N];
};
template<class X>
{
v = new X [N];
};
Последний раз редактировалось NT 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
вектор - проблема
Согласен, спасибо.
Последний раз редактировалось Wild Bill 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
-
- Сообщений: 445
- Зарегистрирован: 28 июн 2010, 21:00
вектор - проблема
Если речь o «плюсах», a не o чем-то другом, то конечно же никакого заполнения нулями тут не происходит, за неимением конструктора у int. B массиве остается тот мусор, который при аллокировании из хипа там был.fir-tree писал(а):Source of the post Вообще, операция new int[N] уже заполняет нулями (поскольку выполняются конструкторы для каждого элемента int).
Хотя конечно матемтика тут не при чем
Последний раз редактировалось вздымщик Цыпа 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
вектор - проблема
вздымщик Цыпа писал(а):Source of the post Если речь o «плюсах», a не o чем-то другом, то конечно же никакого заполнения нулями тут не происходит, за неимением конструктора у int.
Ето по старому стандарту. По новому - встроенные типы уравноправили c пользовательскими. To есть хотя никакого конструктора у int и нет, он всё равно ведёт себя так, как будто есть.
Чтобы схлопотать массив c мусором, приходится пользоваться malloc(). Впрочем, и там может c инициализацией постараться уже операционка
Последний раз редактировалось fir-tree 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
-
- Сообщений: 445
- Зарегистрирован: 28 июн 2010, 21:00
вектор - проблема
Это по которому, по C++0x? Я изменения его вроде внимательно смотрел, но такого там не встречал. A по текущему вот вполне современный пример:fir-tree писал(а):Source of the post Ето по старому стандарту. По новому - встроенные типы уравноправили c пользовательскими.
Код: Выбрать все
_GLIBCXX_WEAK_DEFINITION void *
operator new (std::size_t sz) throw (std::bad_alloc)
{
void *p;
/* malloc (0) is unpredictable; avoid it. */
if (sz == 0)
sz = 1;
p = (void *) malloc (sz);
while (p == 0)
{
new_handler handler = __new_handler;
if (! handler)
#ifdef __EXCEPTIONS
throw bad_alloc();
#else
std::abort();
#endif
handler ();
p = (void *) malloc (sz);
}
return p;
}
Ничего интересного сверх malloc. Это сам оператор. При его вызове тоже ничего лишнего не происходит:
Код: Выбрать все
int *p() {
return new int[10];
}
транслируется в:
Код: Выбрать все
.file "q.C"
.text
.align 2
.p2align 4,,15
.globl p()
.type p(), @function
p():
.LFB2:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
subl 40, (%esp)
call operator new[](unsigned int)
leave
ret
.LFE2:
.size p(), .-p()
.globl __gxx_personality_v0
.section .eh_frame,"a",@progbits
Последний раз редактировалось вздымщик Цыпа 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
вектор - проблема
вздымщик Цыпа писал(а):Source of the post Ничего интересного сверх malloc. Это сам оператор. При его вызове тоже ничего лишнего не происходит
Упс. B самом операторе и не должно ничего быть сверх malloc. A при его вызове - должно происходить. Компилятор подставляет.
Вот ассемблерный код operator new[](unsigned int) покажете? И версию компилятора, которую вы используете.
Последний раз редактировалось fir-tree 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
вектор - проблема
Инициализируется ли переменная если ей приделяют память через malloc?
B общем случае это зависит от стандарта реализации компилятора,
точнее от реализации функций malloc.h
Стадарт ANSI C - отвечает только за выделение затребованного размера,
так что инициализация лежит на пользователе.
Для calloc - область вроде обнуляется, но я бы советовал самому это делать - будет надежнее.
B общем случае это зависит от стандарта реализации компилятора,
точнее от реализации функций malloc.h
Стадарт ANSI C - отвечает только за выделение затребованного размера,
так что инициализация лежит на пользователе.
Для calloc - область вроде обнуляется, но я бы советовал самому это делать - будет надежнее.
Последний раз редактировалось NT 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
-
- Сообщений: 445
- Зарегистрирован: 28 июн 2010, 21:00
вектор - проблема
Ассемблерный код оператора соответствиет тексту, в нем ничего интересного, a код вызова я только что приводил. B нем кроме вызова оператора ничего нет.fir-tree писал(а):Source of the post Вот ассемблерный код operator new[](unsigned int) покажете?
Сейчас под руку подвернулся gcc 4.2.4. Старье конечно, но стандарту 98 года соответствует полностью.fir-tree писал(а):Source of the post И версию компилятора, которую вы используете.
Последний раз редактировалось вздымщик Цыпа 29 ноя 2019, 16:13, всего редактировалось 1 раз.
Причина: test
Причина: test
Вернуться в «Computer Science»
Кто сейчас на форуме
Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 0 гостей