オブジェクトのようにshared_ptr
が必要ですが、メンバーにアクセスしようとすると自動的に実際のオブジェクトが作成されます。C++レイジーポインタはありますか?
例えば、私が持っている:
class Box
{
public:
unsigned int width;
unsigned int height;
Box(): width(50), height(100){}
};
std::vector< lazy<Box> > boxes;
boxes.resize(100);
// at this point boxes contain no any real Box object.
// But when I try to access box number 50, for example,
// it will be created.
std::cout << boxes[49].width;
// now vector contains one real box and 99 lazy boxes.
は、いくつかの実装があり、または私は自分自身を書くことする必要がありますか?
auto_ptrとして子を入れるのは意味をなさないでしょう –
しかし、ボックス[49] - > widthを初期化して、初期化されていない値(0ではない)をどのようにしたらよいでしょうか?おそらく、*(boxes [49])のコンストラクタがそのインデックスを引数として受け取り、他のボックスと区別できるようにするためのインタフェースが必要です。つまり、std:vector以外のものを使うことを意味し、スパースベクトル/行列の領域に入れます。 –
子ポインタの代わりにboost :: optionalのを使用することもできます。 boost :: optionalを使ってを使うと、スタック割り当ての利点が得られます。ヒープが使用されていません –