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 ведет себя так.