对于unique_ptr而言,删除器的类型是智能指针的一部分,但是,与shared_ptr相比,它如何帮助编译器为唯一的_ptr生成更小的运行时数据结构和更快的代码?

#1楼 票数:1

删除器不是这里所指的。

shared_ptr<>需要(除其他外)为每个分配的对象分配两个其他数字(强引用计数和弱引用计数)。

如果使用std::make_shared() ,它们将与对象本身一起存储,否则,将需要为其单独分配。

此外,请记住, unique_ptr<>可以利用空类优化来消除无状态删除器的任何开销。

至少gcc似乎这样做了(至少使用std::default_delete ): https : //godbolt.org/g/nbENL7

  ask by Kishor Bhandari translate from so

未解决问题?本站智能推荐:

2回复

将带有自定义删除器的unique_ptr移动到shared_ptr

我有一个函数,它使用自定义删除器创建unique_ptr并返回它: 在该函数的客户端代码中,我想将unique_ptr移动到shared_ptr ,但我不知道该怎么做,因为我不知道函数之外的自定义删除器的decltype。 我想它应该看起来像这样: 我需要写什么而不是..
4回复

如何避免在每次构造或重置时为std :: shared_ptr指定删除器?

std::unique_ptr有2个模板参数,第二个是要使用的删除器。 由于这个事实,可以通过以下方式轻松地将unique_ptr别名为类型,这需要自定义删除器(例如SDL_Texture ): ...其中SDL2PtrDeleter是一个用作删除器的SDL2PtrDeleter函数。
1回复

构造函数依赖注入:unique_ptr + move vs shared_ptr

我们假设我们有这样的事情: 但是,传递副本无效,因此我们需要转移到指针。 问题是要使用的类型 - unique_ptr或shared_ptr 乍一看,由于Complex是p1, p2, p3的真正拥有者,所以看起来unique_ptr更好; 但是,由于无法复制,我们需要使用st
1回复

在容器类中将虚拟对象与shared_ptr / unique_ptr一起使用

我对C ++相当陌生(来自Java / PHP)。 基本上,我需要创建一个容器类,其中将包含对虚拟类实例(基类)的唯一/共享指针的引用。 我无法编译这段代码(我正在使用MSVC 2015)。 编译器错误是: 这是重现此问题的示例应用程序: 请指教
1回复

我需要优化一个函数,它使用 unique_ptr 和 shared_ptr

所以,我已经在我的作业上工作了很长一段时间,但偶然发现了一个我无法自己解决的问题。 我的任务是创建一个CompositeShape类,该类能够在unique_ptr数组中保存基类Shape shared_ptr指针,以便我们拥有一个派生自Shape类的数组。 CompositeShape本身也是
1回复

shared_ptr的初始化 来自unique_ptr

[跟进这个问题] 最近,我一直在处理一些关于c风格数组的智能指针。 我最终做了推荐的事情,并使用智能指针代替向量,但在此期间,我得到了一些建议:不要使用shared_ptr<T>对象来管理最初使用make_unique<T[]>的数组make_unique<
5回复

unique_ptr和shared_ptr的重载方法与多态性不一致

在我从前一个问题的答案中提示之后编写了一些东西,我遇到了重载Scene :: addObject的问题。 重申相关位并使其自包含,尽可能少的细节: 我有一个继承自Interface的对象的层次结构,其中有Foo和Bar ; 我有一个拥有这些物品的Scene ; F
1回复

从共享的数组ptr访问共享ptr

我有一些功能,它将一些值复制到我将通过的对象。 所以,这样的事情 我会在上面调用这个函数 现在,我想从上面的10中获取单独的共享ptr,并希望制作单独的副本或想要与其他共享ptr共享它。 所以像 基本上我想将所有权从10个共享指针转移到新的个人共享ptr而不分