我注意到我无法将对象实例化为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 可以解释一下吗?