gpt4 book ai didi

c++ - boost make_shared 接受一个 const 引用。有什么办法可以解决这个问题?

转载 作者:IT老高 更新时间:2023-10-28 12:32:11 26 4
gpt4 key购买 nike

我在我的程序中使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com