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