shared-ptr相关内容

比较运算符==中的共享指针常量

我偶然发现了我正在使用的共享指针的意外行为。 共享指针实现引用计数和分离(例如 要实现此目的,对于每个getter函数,智能指针都具有 const 和非常量版本,例如: operator T *()和运算符T const *()const 。 问题:将指针值与进行比较nullptr 导致分离。 期望:我认为比较运算符将始终调用const版本。 简化示例: (此实 ..
发布时间:2020-10-08 07:07:35 C/C++开发

逗号分隔语句中返回值的生命周期

下面的三个注释行的执行顺序是否得到保证? 结构S { S(){/ *称为第一* /} 〜S(){/ *称为第三* /} }; boost :: shared_ptr f() { return boost :: shared_ptr S(new S); } int second(){返回0; / *称为第二* /} int test() ..
发布时间:2020-10-06 00:39:46 C/C++开发

我可以投射shared_ptr< T> &到shared_ptr< T const> &不更改use_count?

我有一个使用 boost :: shared_ptr s的程序,尤其是依赖于 use_count 执行优化。 例如,假设有一个带有两个称为lhs和rhs的参数指针的加法运算。假设它们都具有 shared_ptr 类型。是时候执行加法了,我将检查 use_count ,如果我发现其中一个参数的引用计数恰好是一个,那么我将重用它以执行适当的操作。如果两个参数都不能重用,则必须分配一 ..
发布时间:2020-09-29 22:49:53 C/C++开发

为什么允许shared_ptr< T [N]> ;?

此答案引用了 N4082 ,表明即将对 std :: shared_ptr 进行的更改将同时允许 T [] 和 T [N] 变体: 不同于 unique_ptr 数组的部分专业化,两者 shared_ptr 和 shared_ptr 是有效的,并且两者都会导致 delete [] 被删除 template ..
发布时间:2020-09-28 02:12:20 C/C++开发

具有实物代表的所有权

在阅读RAII之后,查看 Herb Sutter的CppCon2014演示文稿,然后阅读核心指南和相关 文章几天来,我仍然对所有权和相关语义感到困惑。 假设类A和类B代表物理实体,并且有一个Scene类和一个Process类。如果愿意,Process类是一个 main 函数。在现实世界中,A可以获取B并实际保留它。它也可以释放它。因此,在Process实例的过程中,A对象必须能够拥有一个B实 ..
发布时间:2020-09-28 01:02:11 C/C++开发

shared_ptr发布

可能重复: 如何从boost :: shared_ptr释放指针? 从shared_ptr删除指针? 我正在尝试发布shared_ptr(您可以发布unique_ptr的方式)。我知道,当shared_ptr不唯一时,这没有任何意义,但是我有一个shared_ptr,它保证是唯一的。我已经尝试过... m_pObj.reset((T *)nullptr,[](T * co ..
发布时间:2020-09-27 23:46:10 C/C++开发

删除具有受保护析构函数的对象

我必须为类编写一个共享的指针,它要做的许多其他事情就是确保它可以删除它指向的对象。 如何编写可与具有受保护的析构函数的对象一起使用的解决方案? 此外,如果对象是使用new放置创建的,则不应在对象上调用 delete ,因为该空间可能仍在使用中( delete 调用甚至可以工作吗?) 。如何检测到此类情况? 规范的相关位: void reset(); 智能指针设置为指向空指针 ..
发布时间:2020-09-27 23:36:59 C/C++开发

c ++ 11功能的新功能,是否正确使用了shared_ptr?

因此,我的理解是,当对象的最后一个剩余所有者被销毁或重新分配时,shared_ptr会自动从内存中取消分配(似乎太好了,难以置信吗?),当许多实例共享同一对象时,它很有用。是吗? 因此,在我的情况下,我正在制作2D平铺的世界,所以我要在屏幕上绘制许多相同的纹理。 我有 std :: map> Tiledb; 存储所 ..
发布时间:2020-09-27 23:35:44 C/C++开发

Qt Raw vs std :: shared_ptr

我注意到在QT中用shared_ptr替换原始指针时,我的代码不再起作用。 例如,如果不是 QTreeWidgetItem * vItem(new QTreeWidgetItem(ItemTitle)); 我使用 std :: shared_ptr vItem(新的QTreeWidgetItem(ItemTitle)); ..
发布时间:2020-09-27 23:15:39 C/C++开发

使用shared_ptr时出现分段错误

我正在制作一个粒子系统,并且正在为如何构建代码而苦苦挣扎。这个想法是,用户可以创建一个或多个 ParticleEmitter 对象,这些对象通过 ParticleManager 对象c $ c> ofxCurlNoise 对象。 现在,我希望当用户更新 ParticleEmitters 对象时, ParticleManager 对象可以看到所做的更改。因此,我使用了共享指针,但是在不同的时间 ..
发布时间:2020-09-27 22:27:27 C/C++开发

使shared_ptr失去内存所有权

我有一个 shared_ptr ,我可以通过它。最终,在某些情况下,我想将原始指针传递给一个函数,然后该函数成为内存所有者。在这些情况下, shared_ptr 不再负责释放内存,因为我调用的函数已拥有所有权。如何获得 shared_ptr 失去所有权? 我想拥有 shared_ptr 失去所有权是因为我想使用协议缓冲区的AddAllocated功能,该功能采用一个已分配 ..
发布时间:2020-09-27 22:06:07 C/C++开发

使用std :: shared_ptr和受保护的构造函数-析构函数

可能重复: 我想创建一个指向类的共享指针,并有一个工厂方法在返回时返回它保持构造函数\析构函数的保护。由于共享指针无法访问构造函数或析构函数,因此会出现编译器错误。 我正在使用llvm 4.1,但我正在寻找一种解决方案,可以 这是代码示例: class Foo { public: static std :: shared_ptr getSharedPo ..
发布时间:2020-09-27 21:59:10 C/C++开发

是否可以确保弱指针在std :: shared_ptr删除程序运行时已过期?

如果我有一个带有自定义删除器的 std :: shared_ptr ,是否可以保证所有相关的弱指针都被删除器视为已过期? (如果您可以引用标准中的相关部分,将不胜感激。) 换句话说,下面的断言是否可以保证不会触发? std :: weak_ptr弱; std :: shared_ptr strong { new Foo, [& weak]( ..
发布时间:2020-09-27 21:51:25 C/C++开发

为什么没有[]操作符用于std :: shared_ptr?

我想知道这个事实背后的原因是, std :: shared_ptr 没有定义 [] 数组运算符。特别是为什么 std :: unique_ptr 具有此运算符而不具有 std :: shared_ptr 的功能? 解决方案 std :: unique_ptr 仅定义 operator [] 在数组的特殊化中: std :: unique_ptr 。对于非数组指针,operat ..
发布时间:2020-09-27 21:45:36 C/C++开发