Мне трудно понять, что лучше в 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, правильно?