1

我正在使用 C++ 并想在头文件的私有部分中声明一个数组。现在我正在考虑它,我认为这样做是不好的做法?我认为这样做会导致在包含标头的任何地方出现多个声明?几乎像内存泄漏?

它是否正确?我不确定标准的“好”做法是什么?将所有数组声明放在 .cpp 文件中?

4

3 回答 3

6

(假设非成员,因为您没有说任何关于封装类型的内容。如果您对“私有”一词的使用按字面意思理解,那么请澄清您的问题。)


你不会得到内存泄漏;你会得到多个定义错误。

将所有数组定义放在源文件中,是的,但是您可以使用externin 标头“转发声明”数组。

// headers
extern char buf[256];

// one source file
char buf[256];

并不是说我完全建议使用数组...

于 2011-07-20T13:25:01.450 回答
3

没有什么像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

于 2011-07-20T13:34:16.333 回答
0

这是我喜欢和使用的:

 // Header
 extern int MyArray[];

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

这也适用于类级静态数组。

于 2011-07-20T15:31:33.680 回答