单身和智能指针

时间:2016-01-19 19:20:32

标签: c++ c++11

我遇到了this question,并且接受并且得到最多投票的答案提出了以下内容

static shared_ptr<Foo> getInstance()
{
    static std::shared_ptr<Foo> instance = std::make_shared<Foo>();
    return instance; 
}

所以我写了这段小代码

class Manager 
{  
  public:  
  static std::shared_ptr<Manager> get_instance()
  {
    //static std::shared_ptr<Manager> instance = std::make_shared<Manager>();
    static std::shared_ptr<Manager> instance(new Manager());
    return instance;
  } 
  private:  
  Manager() = default;
  Manager(Manager const&) = delete;
  void operator=(Manager const&) = delete;
};

int main ()
{
    std::shared_ptr<Manager> ptr = Manager::get_instance();
    return 0;
}

令我惊讶的是,当我使用std::make_shared编译器(g ++ v5)时,抱怨单例构造函数是私有的(因为它应该用于单例)。第二种方式 - 直接使用new运算符 - 工作者没有问题。

这是否合理 - 它应该像那样工作吗?如果这行是有效的c ++代码,我不会感到沮丧(也许我不是纯粹主义者)。有人能为我提供进一步的解释吗 - 特别是因为make_shared通常更有效率,不是吗?

0 个答案:

没有答案