C ++で作業していて、ヘッダーファイルのプライベートセクションで配列を宣言したいと思います。今考えているのですが、悪い習慣だと思いましたか?これを行うと、ヘッダーが含まれているすべての場所で複数の宣言が発生すると思いますか?まるでメモリリークのようですか?
これは正しいです?標準的な「良い」習慣が何であるかわかりませんか?すべての配列宣言を.cppファイルに入れますか?
C ++で作業していて、ヘッダーファイルのプライベートセクションで配列を宣言したいと思います。今考えているのですが、悪い習慣だと思いましたか?これを行うと、ヘッダーが含まれているすべての場所で複数の宣言が発生すると思いますか?まるでメモリリークのようですか?
これは正しいです?標準的な「良い」習慣が何であるかわかりませんか?すべての配列宣言を.cppファイルに入れますか?
(カプセル化タイプについては何も言わなかったので、非会員を想定しています。「プライベート」という用語の使用を文字通りに解釈する場合は、質問を明確にしてください。)
メモリリークは発生しません。複数の定義エラーが発生します。
はい、すべての配列定義をソースファイルに入れますがextern
、ヘッダーで配列を「前方宣言」することができます。
// 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
これは、クラスレベルの静的配列でも機能します。