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

时间:2016-08-17 21:27:19

标签: c++ visual-studio-2012 constructor shared-ptr

假设我有一个c ++类

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

第1行调用了什么?

make_shared<xyz>()

shared_ptr<xyz>(new xyz())

是否依赖于编译器?

1 个答案:

答案 0 :(得分:2)

该语言几乎没有自动使用图书馆设施。

在某些情况下,核心语言依赖于标准库,是的。例如。您必须包含<typeinfo>标头才能使用typeid运算符。并且std::terminate调用了未处理的异常。但除了这些非常特殊和基本的案例外,核心语言和标准库是分开的。有了必要的编译器和操作系统特定功能的知识,您可以自己实现标准库。

因此,简而言之,通过调用new,您的make_shared - 表达式无法保证神奇替换,但如果编译器可以保证可见效果相同, as-if 规则下优化。

据我所知,自2016年8月起,尚未编制任何编译器。