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

标签 c++ boost

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

相关文章:

c++ - boost 图 : Test if two vertices are adjacent

c++ - 编译的共享库依赖于特定的 libicuuc.so.46 版本

c++ - 在它自己的指针上模板化一个类?

c++ - 是否有可能避免最终不会运行的c++模板函数部分出现错误?

c++ - 如何测试是否删除了 boost 共享内存对象?

c++ - 在 xcode 中链接 boost 库

c++ - 将缺失的节点添加到 boost 图中的邻接列表

c# - 写入文件时如何等待

c++ - 如何在 C++ 中使用静态变量在不同类之间共享数组?

c++ - 具有相同简单改编结构属性的 boost::spirit::qi 规则会产生编译错误