我正在使用 C++ 并想在头文件的私有部分中声明一个数组。现在我正在考虑它,我认为这样做是不好的做法?我认为这样做会导致在包含标头的任何地方出现多个声明?几乎像内存泄漏?
它是否正确?我不确定标准的“好”做法是什么?将所有数组声明放在 .cpp 文件中?
我正在使用 C++ 并想在头文件的私有部分中声明一个数组。现在我正在考虑它,我认为这样做是不好的做法?我认为这样做会导致在包含标头的任何地方出现多个声明?几乎像内存泄漏?
它是否正确?我不确定标准的“好”做法是什么?将所有数组声明放在 .cpp 文件中?
(假设非成员,因为您没有说任何关于封装类型的内容。如果您对“私有”一词的使用按字面意思理解,那么请澄清您的问题。)
你不会得到内存泄漏;你会得到多个定义错误。
将所有数组定义放在源文件中,是的,但是您可以使用extern
in 标头“转发声明”数组。
// headers
extern char buf[256];
// one source file
char buf[256];
并不是说我完全建议使用数组...
没有什么像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
。
这是我喜欢和使用的:
// Header
extern int MyArray[];
// CPP file
int MyArray[] = { 1, 4, 16, 512, 8192 }; // Or give a size
这也适用于类级静态数组。