Мне нужен объект 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)? Вероятно, вы захотите иметь интерфейс, который позволяет конструктору для * (поля [49]) получать свой индекс в качестве аргумента, чтобы он мог отличить себя от других полей. Это означает использование чего-то другого, кроме std: vector, и помещает вас в область разреженных векторов/матриц. –
Вы можете даже использовать boost :: optional вместо указателя на ребенка. Использование boost :: optional означает, что вы используете его распределение стека. Не используется куча, тогда –