我只是尝试使用C ++ Primer中的智能指针代码,我找不到任何问题。它与书中的代码非常相似。
#include <vector>
#include <memory>
std::shared_ptr<std::vector<int>> *my_malloc() {
return std::make_shared<std::vector<int>>();
}
12_7.cc:6:12: error: no viable conversion from
'typename enable_if<!is_array<vector<int, allocator<int> > >::value, shared_ptr<vector<int, allocator<int> > > >::type'
(aka 'std::__1::shared_ptr<std::__1::vector<int, std::__1::allocator<int> > >')
to
'std::shared_ptr<std::vector<int> > *'
return std::make_shared<std::vector<int>>();
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
答案 0 :(得分:4)
你的my_malloc
函数声明它返回指向共享指针的指针(这很奇怪,可能是错误的),然后你返回共享指针(就像你应该的那样)。尝试
std::shared_ptr<std::vector<int>> my_malloc() {
return std::make_shared<std::vector<int>>();
}
答案 1 :(得分:1)
std::shared_ptr<std::vector<int>> *
表示指向指向整数向量的共享指针的指针。您试图从应该返回shared_ptr
的函数返回shared_ptr*
。
您可能希望函数返回实际的shared_ptr
,而不是(非共享)指针,只需删除*
。