1

C ++で作業していて、ヘッダーファイルのプライベートセクションで配列を宣言したいと思います。今考えているのですが、悪い習慣だと思いましたか?これを行うと、ヘッダーが含まれているすべての場所で複数の宣言が発生すると思いますか?まるでメモリリークのようですか?

これは正しいです?標準的な「良い」習慣が何であるかわかりませんか?すべての配列宣言を.cppファイルに入れますか?

4

3 に答える 3

6

(カプセル化タイプについては何も言わなかったので、非会員を想定しています。「プライベート」という用語の使用を文字通りに解釈する場合は、質問を明確にしてください。)


メモリリークは発生しません。複数の定義エラーが発生します。

はい、すべての配列定義をソースファイルに入れますがextern、ヘッダーで配列を「前方宣言」することができます。

// 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 に答える