あなたが探しているのはvector
クラスだと思います。これは、連続した配列のようなストレージ構造 (素晴らしいスタックオーバーフローの質問です) であり、C 配列に代わる C++ です。
ポインターを使用して実行できますが、vector
動的にサイズが大きくなるため、それほど重要ではありません。
あなたの例からの例は次のとおりです。
#include <vector>
class foo{
private:
std::vector<int> *vecPointer;
public:
foo(int size){
vecPointer = new std::vector<int>(size, 0);
// 0 as default value, can be omitted
}
~foo(){
delete vecPointer;
}
}
メモリを予約したいだけで、クラスの初期化時に実際には要素を持っていない場合の代替手段は、メモリを具体的な値で埋めるのではなく、メモリを予約int
することです。その場合、コンストラクタは次のようになります。
foo::foo(int size){
vecPointer = new std::vector<int>();
vecPointer->reserve(size);
}
デストラクタは変更されず、 内ではclass foo
、 で予約サイズまでオブジェクトをvecPointer->push_back(5)
追加でき、それ以上のオブジェクトをまったく同じ方法で追加できます(その後のみ、ベクトル サイズとそれが必要とするメモリが増加します)。
また、本当にポインターを使用しますか? 必要はありません。法線ベクトルを使用できます。
#include <vector>
class foo{
private:
std::vector<int> vec;
public:
foo(int size){
vec.resize(size, 0); // it's initialized as empty here
// alternative, with reserve:
// vec.reserve(size);
}
~foo(){
// no deletion needed like this
}
}
このようにして、すべてが処理され、削除を覚えておく必要がなくなります。