在构造函数下创建共享指针

shared pointer creation under a constructor

本文关键字:共享 指针 创建 构造函数      更新时间:2023-10-16

假设我有一个c++类

class xyz
 {
 ...
 };
class abc 
 {
  shared_ptr<xyz> ptr;
  ..
  abc():ptr( new xyz()) // line 1
   {
   }
 };

第一行调用了什么?

make_shared<xyz>()

shared_ptr<xyz>(new xyz())

是否依赖于编译器?

该语言很少自动使用库功能。

在某些情况下,核心语言依赖于标准库,是的。例如,为了使用typeid操作符,必须包含<typeinfo>标头。还有一个未处理异常的std::terminate调用。但是除了这些非常特殊和基本的情况外,核心语言和标准库是分开的。有了必要的编译器和操作系统特定特性的知识,你可以自己实现标准库。 因此,简而言之,没有保证用make_shared调用来替换new表达式的魔法,但是如果编译器可以保证可见效果是相同的,那么它可以在as-if规则下以这种方式进行优化。

据我所知,截至2016年8月,还没有编译器可以做到这一点。