Necesito un objeto similar shared_ptr
, pero que crea automáticamente un objeto real cuando intento acceder a sus miembros.¿Hay un puntero perezoso en C++?
Por ejemplo, tengo:
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.
¿Hay alguna aplicación, o debería escribir mi propia?
tendrá sentido contener child como auto_ptr –
Pero, ¿cómo inicializaría las cajas [49] -> width para tener un valor inicial no trivial (es decir, no 0)? Probablemente desee tener una interfaz que permita al constructor de * (cuadros [49]) recibir su índice como argumento, para que pueda distinguirse de los otros cuadros. Eso significa usar algo que no sea std: vector, y te pone en el dominio de vectores dispersos/matrices. –
Incluso puede usar boost :: optional en lugar del puntero secundario. Usar boost :: opcional significa que se beneficia de su asignación de stack. No se usa ningún montón entonces –