【发布时间】:2010-11-25 07:47:57
【问题描述】:
我在我的程序中使用 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 会有这种行为。
【问题讨论】:
-
你能给我们看一些代码来演示你想如何使用
make_shared()吗?