Есть такая структура:
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 можно занулять отдельные члены, которые примитивные.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники