Visual Studio 2010中的std :: make_shared()的友元函数(不是Boost)

ura*_*ray 4 c++ friend visual-studio-2010 shared-ptr

如何做朋友的功能std::make_shared().

我试过了:

class MyClass{
public:
     friend std::shared_ptr<MyClass> std::make_shared<MyClass>();
     //or
     //friend std::shared_ptr<MyClass> std::make_shared();
protected:
     MyClass();
};
Run Code Online (Sandbox Code Playgroud)

但它不起作用(我使用的是Visual Studio 2010 SP1)

Ker*_* SB 10

如何在类中添加静态方法:

class Foo
{
public:
  static shared_ptr<Foo> create() { return std::shared_ptr<Foo>(new Foo); }
private:
  // ...
};
Run Code Online (Sandbox Code Playgroud)

这里有点讨厌:

class Foo
{
  struct HideMe { };
  Foo() { };
public:
  explicit Foo(HideMe) { };
  static shared_ptr<Foo> create() { return std::make_shared<Foo>(HideMe());
};
Run Code Online (Sandbox Code Playgroud)

没有人可以使用除类本身之外的公共构造函数.它本质上是公共接口的非接口部分.询问Java人员是否有这样的名字:-)

  • @uray:我相信在这种情况下你不能使用`make_shared`.`make_shared`有一定的要求,可访问的构造函数似乎就是其中之一.您可以通过创建依赖于私有类的公共构造函数来解决这个问题.让我编辑一下. (2认同)
  • @Griwes:`make_shared`创建一个`shared_ptr`版本,它只使用一个动态分配,而不是所有其他版本的两个动态分配。请注意,“make_shared”既不接受删除器参数,也不接受分配器参数;这种灵活性的限制会给你带来效率。 (2认同)