shared-ptr相关内容
考虑以下两个代码片段,第一个: #include "pch.h"#include #include 使用 boost::asio::ip::tcp;tcp_connection 类:公共 std::enable_shared_from_this{民众:typedef std::shared_ptr指针;静态指针创建(boost::asio::io_service&
..
为了将 shared_ptr 分配给柠檬图形库中的图形类型变量,我这样做了: typedef ListDigraph Graph;typedef std::shared_ptr进程指针;Process_pointer process(new Graph); 它工作正常,但现在我需要为地图对象声明一个 shared_ptr,通常地图对象的工作方式如下: 图流程;typedef ListDigr
..
我处于以下情况: 结构容器{数据*指针;};void someFunc(container* receiver/* 想要被填充 */) {auto myData = createData();//返回 shared_ptr接收器->ptr = myData.get();} 生成该数据的函数和接收它的对象是两个不同库的一部分,我无法修改其源代码.我必须处理这些数据类型,对此我无能为力. 所
..
嗨,我正在阅读 C++ 入门第 5 版,我想我在 shared_ptr 部分发现了一个错误.首先,我正在编写代码和他们给出的解释.然后我会写出我认为的错误以及我认为实际发生的事情.代码如下: shared_ptrp(new int(42));//引用计数为 1int *q = p.get();//好的:但不要以任何可能删除其指针的方式使用 q{//新区块开始shared_ptr(q);}//bl
..
我得到异常:std::bad_weak_ptr 当我这样做时->shared_from_this() template类painter_record_t{......私人的:std::shared_ptr_所有者;} 这里我想在构造函数中设置“问题"对象: template类 stream_record_t :公共painter_record_t{民众:stream
..
我有两个类 U 和 T 的 shared_ptr,其中 T 是 U 的基础. 从shared_ptr到shared_ptr的隐式转换是没有问题的.但是也可以将 shared_ptr 转换为 shared_ptr ? 我尝试了建议的解决方案: class T {民众:虚拟 ~T() {}受保护:无效填充数据()= 0;};Timpl 类:公共 T{民众:虚拟 ~Timpl() {}受保
..
我目前正在设计一个 API,我不确定我的函数应该采用 shared_ptr 还是 weak_ptr.有包含查看器的小部件.查看器有一个函数 add_painter 可以向查看器添加一个画家.当查看器需要重绘时,它使用它的画家来绘制到缓冲区中并显示结果.我得出的结论是,观众应该使用 weak_ptr 来抓住画家: 一个画家可能会在多个查看者中使用,因此查看者不能拥有该画家. 删除画家应将其从
..
围绕 FreeRTOS 队列的 C++ wapper 可以简化为如下所示: template类 Queue{民众:bool push(const T& item){返回 xQueueSendToBack(handle, &item, 0) == pdTRUE;}bool pop(T& 目标){返回 xQueueReceive(handle, &target, 0) == pdTRUE;}私人的:
..
我想在多线程应用程序中使用具有自动连接管理功能的 boost 信号2.我的类继承自 enable_shared_from_this 并且我想从另一个成员方法中连接一个成员方法.连接可能会经常重建,所以我的代码应该尽可能快(尽管有提升信号 2 的性能): typedef boost::signals2::signal信号类型;struct Cat : public enable_shared_
..
在以下代码片段中: shared_ptrp;{p = shared_ptr(new int);cout
..
我无法解决这个问题.. 看起来我错过了一些简单的东西?我在 MakePointToSameValue 中放了什么,以便在 (1) b.ptr 和 c.ptr 都指向与 a.ptr 相同的内容 换句话说,a.ptr.get() == b.ptr.get() == c.ptr.get() b.ptr 和 c.ptr 最初指向的值被删除 ? struct 测试{民众:测试(int va
..
我有几个类,其中我制作了 std::shared_ptr 版本,如下所示: typedef std::shared_ptrMediaItemPtr;typedef std::shared_ptrImageMediaItemPtr;类 MediaItem{//这里的东西}类 ImageMediaItem : 公共 MediaItem{//这里有更多的东西} 在内部,我将所有内容作为 MediaI
..
我的代码始终使用原始指针. 它需要调用一个将原始指针带入shared_ptr的方法.这个方法不受我控制,属于外部api.我不能只是将指针传递给 shared_ptr 因为它什么时候会被删除当 shared_ptr 超出方法的作用域时(当方法返回时). 除了在内部代码中将原始指针设为 shared_ptr 之外,我还有其他选择吗? 解决方案 这听起来有些不寻常,而且可能非常危险,
..
我有一种情况,QSharedPointer 托管对象表示它已经完成了它的目的并且准备好很快删除(执行后离开函数发出我的 readyForDeletion 信号).当使用普通指针时,我只需要在对象上调用QObject::deleteLater,但是使用QSharedPointer是不可能的-托管实例.我的解决方法如下: template类 QSharedPointerContainer : 公共
..
如果要复制到成员变量中,共享指针应该通过引用还是通过值作为参数传递给类? 共享指针的复制将增加引用计数,我不想制作任何不必要的副本,因此引用计数会增加.将共享指针作为参考传递会解决这个问题吗?我认为确实如此,但还有其他问题吗? 按值传递: class Boo {民众:嘘(){}};类 Foo {民众:Foo(std::shared_ptr boo): m_Boo(boo) {}私人的
..
我在思考这个问题时遇到了一些困难,可能是因为我不完全了解底层机制. 我有一个如下所示的结构: template 结构体{内部标识;Tx;} 这个结构体被用作 shared_ptr 的类型: typedef std::shared_ptrA_ptr; 依次存储在地图中: typedef unordered_map一张地图; 但是,当我编译时,出现以下错误: >错误:模板参数列表中
..
我正在阅读 C++ Primer 并发现这些内容有点令人困惑: reset 成员通常与 unique 一起使用来控制更改到多个 shared_ptr 之间共享的对象.更改之前底层对象,我们检查我们是否是唯一的用户.如果没有,我们在进行更改之前制作一个新副本: if (!p.unique())p.reset(新字符串(*p));//我们并不孤单;分配一个新副本*p += newVal;//现
..
如何在目标c类的接口部分定义std::unique_ptr的@property? @property std::unique_ptr指针; 但是我可以定义一个共享指针! 如果我定义了唯一指针,则会出现以下错误: 不能被赋值,因为它的复制赋值运算符是隐式删除 解决方案 属性综合是这里的罪魁祸首.当您声明 @property unique_ptr 时,编译器会隐式地创建 set
..
我有 C# 和 obj-c 的背景,所以 RC/GC 是我(仍然)珍视的东西.当我开始更深入地学习 C++ 时,我不禁想知道为什么我会在普通指针如此不受管理而不是其他替代解决方案的情况下使用它们? shared_ptr 提供了一种很好的方式来存储引用并且不会在不删除它们的情况下丢失它们的踪迹.我可以看到普通指针的实用方法,但它们似乎只是不好的做法. 有人可以举例说明这些替代方案吗?
..
我正在阅读“在 dll 接口中使用 shared_ptr".在那篇文章中,phlipsy 在他的回答的最后提出了一种方法,可以不跨 DLL 边界传递特定于实现的对象.基本上,这个想法是从 DLL 返回一个原始指针,并使用该原始指针在 EXE 中初始化 shared_ptr. 我不认为这是正确的.为了简单起见,让我重新设计它. //版本不对??//动态链接库对象* createObject(
..