在构造函数下创建共享指针
shared pointer creation under a constructor
假设我有一个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月,还没有编译器可以做到这一点。
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 嵌套类、继承和C++中的共享指针
- 制作一对共享指针并推送一个向量
- 如何将共享指针用作函数参数
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 尝试通过共享指针使用变量时读取访问冲突
- 如何将元素插入到标准::地图的共享指针中?
- 共享指针生存期
- 初始化可变数据结构中的共享指针向量
- 阻止在返回时复制共享指针