boost make_shared leva em uma referência const. Alguma forma de contornar isso?
Eu estou usando impulsionar ponteiros compartilhados no meu programa e eu tenho uma classe que leva como parâmetros uma referência para outro objeto. O problema que estou correndo é a função make_shared requer que todos os parâmetros sejam uma referência const, e eu recebo erros de compilação se o construtor da minha classe não permitir que parâmetros de referência const sejam passados.
Alguém sabe a razão por trás disso? Além disso, há algo que eu possa fazer para contornar isso?
exemplo de código do que está me 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;
}
Isso resulta em um erro do compilador que afirma o seguinte
: make_shared.hpp: 185: erro: nenhuma função correspondente para chamar para Object :: Object (const int &) 'note: os candidatos são: Object :: Object (objeto const & note): Object :: Object (int &)
Se o parâmetro para o construtor de objetos é um const int, isso funciona. Estou curioso para saber por que o make_shared se comporta dessa maneira.