智能指针的代码失败

时间:2014-08-11 14:13:11

标签: c++ c++11

我只是尝试使用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. 

2 个答案:

答案 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,而不是(非共享)指针,只需删除*