C ++ |void * data [1000] - PullRequest
       1

C ++ |void * data [1000]

0 голосов
/ 22 июля 2011

Это подходящий способ для хранения указателей в статически распределенном массиве таким образом в C ++ ?

void *data[1000];

Различен ли размер void* на 32- и 64-битных компьютерах?

Ответы [ 3 ]

5 голосов
/ 22 июля 2011

Это почти наверняка абсолютно не подходит.Пустые указатели чертовски плохи с самого начала, смешивая их с изменяемыми статическими данными, и у вас есть что-то довольно ужасное.Вдобавок к этому примитивный развернутый массив размером с магическое число, и я очень рад, что этого нет в моем коде.Конечно, если вам нужно, то вам нужно, но в невероятном большинстве нового кода вам ничего подобного не понадобится.

Да, размер void * варьируется.

2 голосов
/ 22 июля 2011

Гораздо лучший выбор, чем void*, - это сделать каждый объект производным от базового класса и использовать вместо него base*.

Гораздо лучший выбор, чем массив фиксированного размера, - использовать std::vector<base*> иликонтейнер повышающего указателя.

Да, размер указателя будет отличаться в 32- и 64-разрядных системах - вот и весь смысл.

1 голос
/ 22 июля 2011

Да, размер void* будет варьироваться в зависимости от разрядности системы.

Невозможно сказать, подходит ли использование массива фиксированного размера и сохранение в нем указателей void* без дополнительных подробностей - обычно это не так.хороший выбор, но иногда у вас действительно нет других вариантов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...