boost make_shared принимает константную ссылку. Есть ли способ обойти это?

Я использую общие указатели boost в моей программе, и у меня есть класс, который принимает в качестве параметров ссылку на другой объект. Проблема, с которой я сталкиваюсь, заключается в том, что функция make_shared требует, чтобы все параметры были константной ссылкой, и я получаю ошибки компиляции, если конструктор моего класса не позволяет передавать константные ссылочные параметры.

Кто-нибудь знает причину этого? Кроме того, что я могу сделать, чтобы обойти это?

Пример кода того, что вызывает у меня проблемы:

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

Это приводит к ошибке компилятора, которая утверждает следующее

: make_shared.hpp: 185: ошибка: нет соответствующей функции для вызова `Object :: Object (const int &) 'примечание: кандидаты: Object :: Object (const Object &) note: Object :: Object (int &)

Если параметр конструктора Objects является const int, это работает. Мне любопытно, почему make_shared ведет себя так.

Ответы на вопрос(6)

Ваш ответ на вопрос