C++でnewを使用して静的データメンバーを宣言できますか? 静的データメンバーをnewで宣言できれば、その静的データメンバーを初期化する方法は?どこへ行く新しい演算子を持つクラスの静的メンバー変数
class A
{
static int *p = new int;
}
int * A :: p =
C++でnewを使用して静的データメンバーを宣言できますか? 静的データメンバーをnewで宣言できれば、その静的データメンバーを初期化する方法は?どこへ行く新しい演算子を持つクラスの静的メンバー変数
class A
{
static int *p = new int;
}
int * A :: p =
の方法は、クラス内の変数を宣言し、それ以外でそれを初期化することです:
class A {
public:
static int* anIntPointer; //<- declaration
};
int* A::anIntPointer = new int(42); //<- initialisation
プログラムのみを終了したとき以来、あなたはまだ手動でメモリをクリーンアップする必要があるだろうがポインタは削除されますが、(OSがメモリを追跡してプログラムが終了した後にクリーンアップしない限り)ポインタが指すメモリは残っています。したがって、delete A::anIntPointer
としてください。 main
の末尾にあります。
C++へのアクセス権がある場合は、直接初期化できるメンバーinline
を宣言できます。とにかく
class A {
public:
inline static int* anIntPointer = new int(42); //<- declaration + initialisation
};
自分でメモリをクリーンアップするための責任を負うことにしたくない場合は、スマートポインタ(std::auto_ptr<>
前にC++ 11、std::unique_ptr<>
C++ 11以降)を使用することができます。 A::anSmartPointer
は、あなたのプログラムの終了時に破棄されます
class A {
public:
static std::unique_ptr<int> anSmartPointer;
};
std::unique_ptr<int> A::anSmartPointer = std::unique_ptr<int>(new int(42)); // C++11
// std::unique_ptr<int> A::anSmartPointer = std::make_unique<int>(42); // or C++14 style
、それが自動的に制御するメモリをクリーンアップします。
Here私はちょうど説明したすべての事例(C++ 17 inline static
スマートポインタのような)の実例を見ることができます。
クラスの外部でのクラス、定義、および初期化における変数のインライン宣言。それは最も簡単です。 –
それは良いですが、私の質問は、私はクラス内で新しいを使用して静的変数を宣言することができます –
いいえ..静的な値はヒープには存在しません –