boost :: shared_ptr :: shared_ptr(const boost :: shared_ptr&)'被隐式声明为已删除

q09*_*987 15 c++ boost c++11

#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
using namespace std;

struct Node
{
    Node(int data, boost::shared_ptr<int> next = boost::make_shared<int>())
      : m_data(data), m_next(next) {}

    int m_data;
    boost::shared_ptr<int> m_next;    
};
Run Code Online (Sandbox Code Playgroud)

错误:http: //www.compileonline.com/compile_cpp11_online.php - 在线编译和执行C++ 11(GNU GCC版本4.7.2)

Compiling the source code....
$g++ -std=c++11 main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2>&1
main.cpp: In constructor 'Node::Node(int, boost::shared_ptr)':
main.cpp:9:34: error: use of deleted function 'boost::shared_ptr::shared_ptr(const boost::shared_ptr&)'
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
from main.cpp:2:
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: 'boost::shared_ptr::shared_ptr(const boost::shared_ptr&)' is implicitly declared as deleted because 'boost::shared_ptr' declares a move constructor or move assignment operator
Run Code Online (Sandbox Code Playgroud)

问题>我看到帖子使用std :: shared_ptr和clang ++和libstdc ++.但是,我不知道如何解决它.

在该问题中发布的解决方案是"将默认的复制构造函数和复制赋值运算符添加到shared_ptr将解决问题."

Jon*_*ely 27

这是旧版本中的一个错误boost::shared_ptr,使其与C++ 11编译器不兼容.

最终的C++ 11标准说,声明移动构造函数或移动赋值运算符会阻止复制构造函数的隐式定义,但旧版本boost::shared_ptr不遵循该规则并假设将隐式定义复制构造函数.

您需要升级到Boost版本1.48或更高版本,或编辑Boost标头以将其添加到shared_ptr:

shared_ptr(const shared_ptr&) = default;
Run Code Online (Sandbox Code Playgroud)