我在我的程序中使用 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&) 注意:Object::Object(int&)
如果 Objects 构造函数的参数是 const int,则此方法有效。我很好奇为什么 make_shared 会有这种行为。
最佳答案
http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/make_shared.html说:“如果您需要将非常量引用传递给 T 的构造函数,您可以通过将参数包装在对 boost::ref 的调用中来实现。”该页面上的其他文字似乎支持 Rüdiger Hanke 的回答。
关于c++ - boost make_shared 接受一个 const 引用。有什么办法可以解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1373896/