boost make_shared przyjmuje stałą referencję. Jakikolwiek sposób obejścia tego?

W moim programie używam wzmocnionych wskaźników współużytkowanych i mam klasę, która przyjmuje jako parametry odwołanie do innego obiektu. Problem, w który wpadam, to funkcja make_shared, która wymaga, aby wszystkie parametry były odwołaniem stałym, a ja otrzymuję błędy kompilacji, jeśli konstruktor mojej klasy nie zezwala na przekazywanie stałych parametrów referencyjnych.

Czy ktoś zna powód tego? Czy jest coś, co mogę zrobić, aby obejść to?

kodowy przykład tego, co sprawia mi problemy:

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;
}

Powoduje to błąd kompilatora, który stwierdza, co następuje

: make_shared.hpp: 185: error: brak funkcji dopasowania dla wywołania `Object :: Object (const int &) 'note: kandydatami są: Object :: Object (const Object &) note: Object :: Object (int &)

Jeśli parametr do konstruktora Objects jest stałą int, to działa. Jestem ciekawy, dlaczego make_shared zachowuje się w ten sposób.

questionAnswers(6)

yourAnswerToTheQuestion