shared-ptr相关内容

删除 std::shared_ptr 而不破坏托管对象?

我处于以下情况: 结构容器{数据*指针;};void someFunc(container* receiver/* 想要被填充 */) {auto myData = createData();//返回 shared_ptr接收器->ptr = myData.get();} 生成该数据的函数和接收它的对象是两个不同库的一部分,我无法修改其源代码.我必须处理这些数据类型,对此我无能为力. 所 ..
发布时间:2021-07-23 20:32:17 C/C++开发

在 C++ Primer 5th edition shared_ptr<int> 中发现错误

嗨,我正在阅读 C++ 入门第 5 版,我想我在 shared_ptr 部分发现了一个错误.首先,我正在编写代码和他们给出的解释.然后我会写出我认为的错误以及我认为实际发生的事情.代码如下: shared_ptrp(new int(42));//引用计数为 1int *q = p.get();//好的:但不要以任何可能删除其指针的方式使用 q{//新区块开始shared_ptr(q);}//bl ..
发布时间:2021-07-23 20:32:14 C/C++开发

异常:bad_weak_ptr 而 shared_from_this

我得到异常:std::bad_weak_ptr 当我这样做时->shared_from_this() template类painter_record_t{......私人的:std::shared_ptr_所有者;} 这里我想在构造函数中设置“问题"对象: template类 stream_record_t :公共painter_record_t{民众:stream ..
发布时间:2021-07-23 20:32:11 C/C++开发

shared_ptr 的隐式转换

我有两个类 U 和 T 的 shared_ptr,其中 T 是 U 的基础. 从shared_ptr到shared_ptr的隐式转换是没有问题的.但是也可以将 shared_ptr 转换为 shared_ptr ? 我尝试了建议的解决方案: class T {民众:虚拟 ~T() {}受保护:无效填充数据()= 0;};Timpl 类:公共 T{民众:虚拟 ~Timpl() {}受保 ..
发布时间:2021-07-23 20:32:08 C/C++开发

我的 API 函数应该采用 shared_ptr 还是 weak_ptr

我目前正在设计一个 API,我不确定我的函数应该采用 shared_ptr 还是 weak_ptr.有包含查看器的小部件.查看器有一个函数 add_painter 可以向查看器添加一个画家.当查看器需要重绘时,它使用它的画家来绘制到缓冲区中并显示结果.我得出的结论是,观众应该使用 weak_ptr 来抓住画家: 一个画家可能会在多个查看者中使用,因此查看者不能拥有该画家. 删除画家应将其从 ..
发布时间:2021-07-23 20:32:05 C/C++开发

FreeRTOS 中的共享指针和队列

围绕 FreeRTOS 队列的 C++ wapper 可以简化为如下所示: template类 Queue{民众:bool push(const T& item){返回 xQueueSendToBack(handle, &item, 0) == pdTRUE;}bool pop(T& 目标){返回 xQueueReceive(handle, &target, 0) == pdTRUE;}私人的: ..
发布时间:2021-07-23 20:32:02 其他开发

为什么 enable_shared_from_this 无法直接访问嵌入式weak_ptr?

我想在多线程应用程序中使用具有自动连接管理功能的 boost 信号2.我的类继承自 enable_shared_from_this 并且我想从另一个成员方法中连接一个成员方法.连接可能会经常重建,所以我的代码应该尽可能快(尽管有提升信号 2 的性能): typedef boost::signals2::signal信号类型;struct Cat : public enable_shared_ ..
发布时间:2021-07-23 20:31:59 C/C++开发

shared_ptr 的动态转换

我有几个类,其中我制作了 std::shared_ptr 版本,如下所示: typedef std::shared_ptrMediaItemPtr;typedef std::shared_ptrImageMediaItemPtr;类 MediaItem{//这里的东西}类 ImageMediaItem : 公共 MediaItem{//这里有更多的东西} 在内部,我将所有内容作为 MediaI ..
发布时间:2021-07-23 20:31:49 C/C++开发

原始指针和 shared_ptr 之间的 C++ 接口

我的代码始终使用原始指针. 它需要调用一个将原始指针带入shared_ptr的方法.这个方法不受我控制,属于外部api.我不能只是将指针传递给 shared_ptr 因为它什么时候会被删除当 shared_ptr 超出方法的作用域时(当方法返回时). 除了在内部代码中将原始指针设为 shared_ptr 之外,我还有其他选择吗? 解决方案 这听起来有些不寻常,而且可能非常危险, ..
发布时间:2021-07-23 20:31:46 C/C++开发

QSharedPointer 和 QObject::deleteLater

我有一种情况,QSharedPointer 托管对象表示它已经完成了它的目的并且准备好很快删除(执行后离开函数发出我的 readyForDeletion 信号).当使用普通指针时,我只需要在对象上调用QObject::deleteLater,但是使用QSharedPointer是不可能的-托管实例.我的解决方法如下: template类 QSharedPointerContainer : 公共 ..
发布时间:2021-07-23 20:31:43 C/C++开发

通过引用或通过值将共享指针作为参数传递给类

如果要复制到成员变量中,共享指针应该通过引用还是通过值作为参数传递给类? 共享指针的复制将增加引用计数,我不想制作任何不必要的副本,因此引用计数会增加.将共享指针作为参考传递会解决这个问题吗?我认为确实如此,但还有其他问题吗? 按值传递: class Boo {民众:嘘(){}};类 Foo {民众:Foo(std::shared_ptr boo): m_Boo(boo) {}私人的 ..
发布时间:2021-07-23 20:31:40 C/C++开发

构建本身是 shared_ptr 类型的模板化容器

我在思考这个问题时遇到了一些困难,可能是因为我不完全了解底层机制. 我有一个如下所示的结构: template 结构体{内部标识;Tx;} 这个结构体被用作 shared_ptr 的类型: typedef std::shared_ptrA_ptr; 依次存储在地图中: typedef unordered_map一张地图; 但是,当我编译时,出现以下错误: >错误:模板参数列表中 ..
发布时间:2021-07-23 20:31:34 C/C++开发

智能指针,为什么在改变底层对象之前需要检查我是否是唯一的用户?

我正在阅读 C++ Primer 并发现这些内容有点令人困惑: reset 成员通常与 unique 一起使用来控制更改到多个 shared_ptr 之间共享的对象.更改之前底层对象,我们检查我们是否是唯一的用户.如果没有,我们在进行更改之前制作一个新副本: if (!p.unique())p.reset(新字符串(*p));//我们并不孤单;分配一个新副本*p += newVal;//现 ..
发布时间:2021-07-23 20:31:22 C/C++开发

std::unique_ptr 作为目标 c 中的 @property

如何在目标c类的接口部分定义std::unique_ptr的@property? @property std::unique_ptr指针; 但是我可以定义一个共享指针! 如果我定义了唯一指针,则会出现以下错误: 不能被赋值,因为它的复制赋值运算符是隐式删除 解决方案 属性综合是这里的罪魁祸首.当您声明 @property unique_ptr 时,编译器会隐式地创建 set ..
发布时间:2021-07-23 20:31:19 移动开发

为什么我不应该总是使用 shared_ptr 和 unique_ptr 而是使用普通指针?

我有 C# 和 obj-c 的背景,所以 RC/GC 是我(仍然)珍视的东西.当我开始更深入地学习 C++ 时,我不禁想知道为什么我会在普通指针如此不受管理而不是其他替代解决方案的情况下使用它们? shared_ptr 提供了一种很好的方式来存储引用并且不会在不删除它们的情况下丢失它们的踪迹.我可以看到普通指针的实用方法,但它们似乎只是不好的做法. 有人可以举例说明这些替代方案吗? ..
发布时间:2021-07-23 20:31:17 C/C++开发

正确使用 shared_ptr 来消除跨 DLL 边界的释放

我正在阅读“在 dll 接口中使用 shared_ptr".在那篇文章中,phlipsy 在他的回答的最后提出了一种方法,可以不跨 DLL 边界传递特定于实现的对象.基本上,这个想法是从 DLL 返回一个原始指针,并使用该原始指针在 EXE 中初始化 shared_ptr. 我不认为这是正确的.为了简单起见,让我重新设计它. //版本不对??//动态链接库对象* createObject( ..
发布时间:2021-07-23 20:31:14 C/C++开发