Объявление массива в файле .h, это хорошая идея? - PullRequest
0 голосов
/ 20 июля 2011

Я работаю в C ++ и хочу объявить массив в закрытом разделе заголовочного файла. Теперь, когда я думаю об этом, я подумал, что это плохая практика? Я думаю, что это приведет к нескольким объявлениям везде, где включен заголовок? Почти как утечка памяти?

Это правильно? Я не уверен, какой будет стандартная «хорошая» практика? Поместить все объявления массива в файл .cpp?

Ответы [ 3 ]

6 голосов
/ 20 июля 2011

(Предполагается, что пользователь не является членом, поскольку вы ничего не сказали о инкапсулирующем типе. Если вы употребляли термин «частный» буквально, то уточните свой вопрос.)


Вы не получите утечку памяти;вы получите несколько ошибок определений.

Поместите все определения массива в исходный файл, да, но вы можете "объявить" массив вперед с extern в заголовках.

// headers
extern char buf[256];

// one source file
char buf[256];

Не то чтобы я рекомендовал использовать массивы вообще ...

3 голосов
/ 20 июля 2011

Нет ничего похожего на private секцию заголовочного файла. Если вы объявите массив глобально в заголовочном файле, вы можете получить несколько определений (не утечка памяти). Это ошибка компоновщика.

Лучший способ - объявить массив как extern в заголовочном файле и определить в файле .cpp:

//myfile.h
extern int a[100];

//myfile.cpp
int a[100];

Примечание : Если вы объявляете массив static или внутри безымянного namespace внутри заголовочного файла:

//myfile.h
static int a[100];
    OR
//myfile.h
namespace { int a[100]; }

тогда вы не получите проблему с множественным определением. Однако новая копия массива будет создаваться в каждом файле .cpp, заголовок которого #include ed.

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

Это то, что я предпочитаю и использую:

 // Header
 extern int MyArray[];

 // CPP file
 int MyArray[] = { 1, 4, 16, 512, 8192 }; // Or give a size

И это работает и для статических массивов уровня класса.

...