Я использую boost-указатели в моей программе, и у меня есть класс, который принимает в качестве параметров ссылку на другой объект. Проблема, с которой я столкнулся, заключается в том, что функция make_shared требует, чтобы все параметры были ссылкой на const, и я получаю ошибки компиляции, если мой конструктор классов не разрешает передавать ссылочные параметры const.
Кто-нибудь знает причину этого? Кроме того, есть ли что-нибудь, что я могу сделать, чтобы обойти это?
пример кода того, что вызывает у меня проблемы:
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 &)
Если параметр конструктор объектов является константой int, это работает. Мне любопытно, почему make_shared ведет себя таким образом.