对象创建为std :: make_shared参数

时间:2017-03-29 18:32:22

标签: c++

我注意到我无法将对象实例化为make_shared参数(请参阅下面的示例)。以来 我对模板,make_shared的定义并不熟悉 template< class T, class... Args > shared_ptr<T> make_shared( Args&&... args ); 没有告诉我为什么make_shared({0})失败。

有人可以解释为什么会这样吗?

class Alpha
{
    int mValue;
    bool mBool;
public:
    Alpha(int value, bool lbool) :mValue(value), mBool(lbool){}
};
class Beta
{
    Alpha mAlpha;
public:
    explicit Beta(Alpha alpha): mAlpha(alpha){}
};

int main()
{
    Alpha a{0, true};
    Beta b1(1, a); // ok
    Beta b2(1, {0, true}); //ok
    auto pB1 = std::make_shared<Beta, Alpha>({ 0, true }); // ok
    auto pB2 = std::make_shared<Beta>({ 0, true }); // make_shared does not take 1 arguments

     auto pB3 = std::make_shared<Beta>(1, a); // ok
     auto pB4 = std::make_shared<Beta>(1, {0, true}); // Err:  make_shared does not take 2 arguments
     auto pB5 = std::make_shared<Beta>(1, Alpha{0, true}); // ok
     auto pB6 = std::make_shared<Beta>(1, Alpha{ 0, true }); // ok
     auto pB7 = std::make_shared<Beta, Alpha>(1, {0, true }); // Err: make_shared does not take 2 arguments
}

* edit1:在Alpha

中添加了一个额外的属性

* edit2:添加了新案例,仍然不确定为什么 pB7 会失败但 pB1 可以解释一下吗?

0 个答案:

没有答案