Есть такая структура:
typedef unsigned char byte;
struct A
{
int a;
byte b;
std::vector<int>z;
}
Хочу написать метод для инициализации нулём полей структуры.
void setZero()
{
memset(this,0,sizeof(A));
}
Вот только с вектором проблема. Нельзя так делать. А как можно, не понимаю.
Нужно просто добавить конструктор, в котором все поля занулить. Вектор занулять никак не нужно, т.к. он по умолчанию пустой и готовый к работе.
A::A() : a(0), b(0) {}
Если конструктор не приемлем, если нужно именно внешней функцией занулить, тогда просто нужно занулить каждое примитивное поле:
void Zeroize(A & a) {
a.a = 0;
a.b = 0;
}
Также в C++11 можно писать инициализацию полей прямо в структуре.
struct A {
int a = 0;
byte b = 0;
std::vector<int> z;
};
По поводу memset()
, таким методом можно занулять структуры, у которых все поля примитивные (числа, Си массивы). Если хоть одно поле представляет сложный класс, например STL класс, тогда занулять всё нельзя. В этом случае через memset
можно занулять отдельные члены, которые примитивные.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите разобраться поглубже чем по сути является именованная ячейка памяти (переменная)Не могу правильно сформулировать свой вопрос,...
Что обозначает такая запись? поставило в тупик, применением "::" несколько раз