C ++: использовать memset или конструктор структуры? Какой самый быстрый?

Мне трудно понять, что лучше в C ++:

Я использую структуру для управления клиентами в очереди сообщений, структура выглядит так:

typedef struct _MsgClient {
  int handle;
  int message_class;
  void *callback;
  void *private_data;
  int priority;
} MsgClient;

Все это Сущности POD.

Теперь у меня есть массив этих структур, в которых я храню своих клиентов (я использую массив для ограничения памяти, мне нужно ограничить фрагментацию). Итак, в моем классе у меня есть что-то вроде этого:

class Foo
{
private:
  MsgClient _clients[32]; 

public:
  Foo()
  {
     memset(_clients, 0x0, sizeof(_clients));
  }

}

Я кое-где читал на SO, что использование memset в C ++ плохо, и что я бы предпочел использовать конструктор для своей структуры. Я предположил что-то вроде этого:

typedef struct _MsgClient {
  int handle;
  int message_class;
  void *callback;
  void *private_data;
  int priority;
  // struct constructor
  _MsgClient(): handle(0), message_class(0), callback(NULL), private_data(NULL), priority(0) {};
} MsgClient;

... устранит необходимость в memset . Но я опасаюсь, что при инициализации foo конструктор структуры будет вызываться 32 раза, вместо того, чтобы оптимизировать его как простой ноль из памяти, занятой массивом.

Что вы думаете по этому поводу?
Я только что нашел это: Может ли структура-член быть нулевой инициализацией из списка инициализаторов конструктора без вызова memset? , подходит ли это в моем случае (который отличается: у меня есть массив, а не один экземпляр структура)?
Кроме того, согласно в этом сообщении , добавление конструктора в мою структуру автоматически преобразует ее в структуру, не относящуюся к POD, верно?

8
задан Community 23 May 2017 в 12:13
поделиться