Инициализация вектора в структуре

312
21 сентября 2017, 16:24

Есть такая структура:

typedef unsigned char byte;
struct A
{
    int a;
    byte b;
    std::vector<int>z;
}

Хочу написать метод для инициализации нулём полей структуры.

void setZero()
{
    memset(this,0,sizeof(A));
}

Вот только с вектором проблема. Нельзя так делать. А как можно, не понимаю.

Answer 1

Нужно просто добавить конструктор, в котором все поля занулить. Вектор занулять никак не нужно, т.к. он по умолчанию пустой и готовый к работе.

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 можно занулять отдельные члены, которые примитивные.

READ ALSO
Как напечатать символ дельта? [дубликат]

Как напечатать символ дельта? [дубликат]

На данный вопрос уже ответили:

230
Как хранится имя переменной?

Как хранится имя переменной?

Помогите разобраться поглубже чем по сути является именованная ячейка памяти (переменная)Не могу правильно сформулировать свой вопрос,...

212
Что обозначает эта запись?

Что обозначает эта запись?

Что обозначает такая запись? поставило в тупик, применением "::" несколько раз

199