使用列表 <int> 数组初始化共享指针时出错
Error initializing shared pointer with an array of list<int>
我正在尝试使用 shared_ptr 实现图表 class。我已经声明我的 class 如下。
class Graph
{
public:
Graph(int V);
Graph()=delete;
void AddEdge(int src, int dest);
void BFS(int s);
~Graph();
private:
int V;
std::shared_ptr<std::list<int>[]> adj;
};
当我尝试在构造函数中像下面这样初始化 adjList 时,出现编译错误。
Graph::Graph(int V)
{
this->V = V;
adj = std::make_shared<std::list<int>[]>(new std::list<int>[V]);
}
错误:
/usr/include/c++/9/bits/shared_ptr.h:717:39: required from ‘std::shared_ptr<_Tp> std::make_shared(_Args&& ...) [with _Tp = std::__cxx11::list<int> []; _Args = {std::__cxx11::list<int, std::allocator<int> >*}]’
Graph.cpp:21:67: required from here
/usr/include/c++/9/ext/new_allocator.h:145:20: error: no matching function for call to ‘std::__cxx11::list<int>::list(std::__cxx11::list<int>*)’
我做错了什么?
C++11 只有一个 make_shared
函数。它的原型是这样的:
template< class T, class... Args >
shared_ptr<T> make_shared( Args&&... args );
T
不能是数组。
- 该函数接受将传递给
T
构造函数的参数,但是 std::list
没有可以接受 new std::list<int>[V]
. 的构造函数
我正在尝试使用 shared_ptr 实现图表 class。我已经声明我的 class 如下。
class Graph
{
public:
Graph(int V);
Graph()=delete;
void AddEdge(int src, int dest);
void BFS(int s);
~Graph();
private:
int V;
std::shared_ptr<std::list<int>[]> adj;
};
当我尝试在构造函数中像下面这样初始化 adjList 时,出现编译错误。
Graph::Graph(int V)
{
this->V = V;
adj = std::make_shared<std::list<int>[]>(new std::list<int>[V]);
}
错误:
/usr/include/c++/9/bits/shared_ptr.h:717:39: required from ‘std::shared_ptr<_Tp> std::make_shared(_Args&& ...) [with _Tp = std::__cxx11::list<int> []; _Args = {std::__cxx11::list<int, std::allocator<int> >*}]’
Graph.cpp:21:67: required from here
/usr/include/c++/9/ext/new_allocator.h:145:20: error: no matching function for call to ‘std::__cxx11::list<int>::list(std::__cxx11::list<int>*)’
我做错了什么?
C++11 只有一个 make_shared
函数。它的原型是这样的:
template< class T, class... Args >
shared_ptr<T> make_shared( Args&&... args );
T
不能是数组。- 该函数接受将传递给
T
构造函数的参数,但是std::list
没有可以接受new std::list<int>[V]
. 的构造函数