boost make_shared принимает константную ссылку. Есть ли способ обойти это?
Я использую общие указатели boost в моей программе, и у меня есть класс, который принимает в качестве параметров ссылку на другой объект. Проблема, с которой я сталкиваюсь, состоит в том, что функция make_shared требует, чтобы все параметры были константной ссылкой, и я получаю ошибки компиляции, если мой класс 'конструктор неt разрешить передачу константных опорных параметров.
Кто-нибудь знает причину этого? Кроме того, что я могу сделать, чтобы обойти это?
Пример кода того, что вызывает у меня проблемы:
class Object
{
public:
Object(int& i)
{
i = 2;
}
};
int main(int argc, char *argv[])
{
int i = 0;
boost::shared_ptr obj = boost::make_shared(i);
return 1;
}
Это приводит к ошибке компилятора, которая утверждает следующее
: make_shared.hpp: 185: ошибка: нет подходящей функции для вызова `Object :: Object (const int &) ' примечание: кандидаты: Object :: Object (const Object &) примечание: Object :: Object (int &)
Если параметр конструктора Objects является const int, это работает. Мне любопытно, почему make_shared ведет себя так.