C++ //练习 16.38 当我们调用make_shared(参见12.11节,第401页)时,必须提供一个显示模板实参。解释为什么需要显示模板实参以及它是如何使用的。

C++ Primer(第5版) 练习 16.38

练习 16.38 当我们调用make_shared(参见12.11节,第401页)时,必须提供一个显示模板实参。解释为什么需要显示模板实参以及它是如何使用的。

环境:Linux Ubuntu(云服务器)
工具:vim

 

解释

在 C++ 中使用 std::make_shared 时,如果要指定要为其创建 std::shared_ptr 的对象类型,通常需要显式模板参数。

1. 类型推导限制:

  • 推导失败:调用 make_shared 时,如果构造函数参数没有为编译器提供足够的信息来推导类型,则必须显式指定类型。
  • 歧义:如果一个类有多个构造函数,编译器可能无法确定要使用哪个构造函数,从而导致歧义。提供显式模板参数可以通过指定确切的类型来解决此问题。

2. 模板实例化

  • 多态类型:如果您为多态类型(即具有虚函数的类)创建 shared_ptr,并且传递基类指针或引用,则编译器将无法推断出派生类类型。
  • 自定义分配器:在涉及自定义分配器的场景中,可能无法正确推断分配器类型。

3. 零参数构造函数:

  • 如果您使用零参数构造函数创建对象,则编译器没有参数来推断类型,因此需要明确指定。

4. 非默认构造函数:

  • 当使用具有非默认参数的构造函数时,如果参数的类型不完全匹配,则类型推断可能会失败,因此需要明确指定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Navigator_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值