Estoy usando boost punteros compartidos en mi programa, y tengo una clase que toma como parámetros una referencia a otro objeto. El problema que estoy en es la función make_shared requiere que todos los parámetros a ser una referencia constante, y me da errores de compilación si el constructor de mi clase no permite parámetros de referencia const a ser pasados en.boost make_shared lleva en una referencia constante. ¿Alguna forma de evitar esto?
¿Alguien sabe la razón de ¿esta? Además, ¿hay algo que pueda hacer para evitar esto?
código de ejemplo de lo que me está dando problemas:
class Object
{
public:
Object(int& i)
{
i = 2;
}
};
int main(int argc, char *argv[])
{
int i = 0;
boost::shared_ptr<Object> obj = boost::make_shared<Object>(i);
return 1;
}
Esto da lugar a un error de compilación que indica la
siguiente: make_shared.hpp: 185: Error: ninguna función coincidente para la llamada a ` objeto :: objeto (const int &)' nota: los candidatos son: objeto :: objeto (objeto const &) nota: objeto :: objeto (int &)
Si el parámetro para el constructor de Objetos es un const int, esto funciona. Tengo curiosidad sobre por qué make_shared se comporta de esta manera.
¿Puede mostrarnos algún código para demostrar cómo desea usar 'make_shared()'? – quamrana
snippet de código publicado –