shared-ptr相关内容

提升 async_* 函数和 shared_ptr 的

我经常在代码中看到这种模式,将 shared_from_this 作为第一个参数绑定到成员函数并使用 async_* 函数分派结果.这是另一个问题的示例: void Connection::Receive(){boost::asio::async_read(socket_,boost::asio::buffer(this->read_buffer_),boost::bind(&Connectio ..
发布时间:2021-12-24 15:05:54 C/C++开发

我们应该通过引用还是通过值传递 shared_ptr ?

当一个函数接受一个 shared_ptr(来自 boost 或 C++11 STL)时,你是否通过了它: 通过常量引用:void foo(const shared_ptr& p) 或按值:void foo(shared_ptr p) ? 我更喜欢第一种方法,因为我怀疑它会更快.但这真的值得吗?还有其他问题吗? 能否请您说明您选择的理由,或者如果情况如此,您认为这无关紧 ..
发布时间:2021-12-24 15:01:06 C/C++开发

使用 shared_ptr 的示例?

嗨,我今天问了一个关于 如何插入不同的问题同一向量数组中的对象类型 和我在那个问题中的代码是 门* G[1000];G[0] = 新的与门();G[1] = 新 ORgate;//gate是ANDgate和ORgate类继承的类班级门{...........虚空运行(){//一个虚函数}};类 ANDgate : 公共门{...........无效运行(){//AND 版本的运行}};ORga ..
发布时间:2021-12-21 13:35:20 C/C++开发

使用 boost::shared_ptr 时有哪些潜在危险?

在使用 boost::shared_ptr?换句话说,当我使用 boost::shared_ptr? 解决方案 循环引用:一个 shared_ptr 指向具有 shared_ptr 到原始对象.当然,您可以使用 weak_ptr 来打破这个循环. 我添加以下内容作为我在评论中谈论的内容的示例. 类节点:public enable_shared_from_this{上市 :void ..
发布时间:2021-12-13 13:40:21 C/C++开发

unique_ptr 和 shared_ptr 的区别

可能的重复: pimpl:shared_ptr 或 unique_ptr 智能指针(boost)解释 有人可以解释 shared_ptr 和 unique_ptr 之间的区别吗? 解决方案 这两个类都是智能指针,这意味着它们会自动(在大多数情况下)解除分配它们指向的对象,当该对象不再可用时参考.两者的区别在于每种类型可以有多少个不同的指针指向一个资源. 当使用unique_ ..
发布时间:2021-12-13 12:49:19 C/C++开发

shared_ptr 到数组:应该使用它吗?

只是关于 shared_ptr 的一个小问题. 使用 shared_ptr 指向数组是一个好习惯吗?例如, shared_ptrsp(new int[10]); 如果没有,那为什么不呢?我已经知道的一个原因是不能增加/减少 shared_ptr.因此它不能像普通的数组指针一样使用. 解决方案 使用 C++17,shared_ptr 可用于管理动态分配的数组.在这种情况下,shar ..
发布时间:2021-12-12 14:22:11 C/C++开发

何时使用虚拟析构函数?

我对大多数 OOP 理论有深刻的理解,但让我很困惑的一件事是虚拟析构函数. 我认为无论是什么,对于链中的每个对象,总是会调用析构函数. 你打算什么时候让它们虚拟化,为什么? 解决方案 当您可能通过指向基类的指针删除派生类的实例时,虚拟析构函数很有用: 类基础{//一些虚方法};派生类:公共基础{~派生(){//做一些重要的清理工作}}; 在这里,您会注意到我没有将 Base ..
发布时间:2021-12-01 14:40:56 C/C++开发

在 dll 接口中使用 shared_ptr

我的 dll 中有一个抽象类. class IBase {受保护:虚拟 ~IBase() = 0;民众:虚空 f() = 0;}; 我想在加载 dll 的 exe 文件中获取 IBase.第一种方法是创建以下函数 IBase * CreateInterface(); 并在IBase中添加虚函数Release(). 第二种方法是创建另一个函数 boost::shared_ptr创建接 ..
发布时间:2021-11-26 16:52:51 C/C++开发

在 dll 接口中使用 shared_ptr

我的 dll 中有一个抽象类. class IBase {受保护:虚拟 ~IBase() = 0;民众:虚空 f() = 0;}; 我想在加载 dll 的 exe 文件中获取 IBase.第一种方法是创建以下函数 IBase * CreateInterface(); 并在IBase中添加虚函数Release(). 第二种方法是创建另一个函数 boost::shared_ptr创建接 ..
发布时间:2021-11-25 09:26:17 C/C++开发

为什么 unique_ptr 和 shared_ptr 不会使构造它们的指针无效?

注意:这是一个API 设计问题,依赖于unique_ptr 和share_ptr 的构造函数的设计code> 是为了提出问题,但不打算对他们当前的规范提出任何更改. 虽然通常建议使用 make_unique 和 make_shared,但是 unique_ptr 和 shared_ptr 都可以构造来自原始指针. 两者都按值获取指针并复制它.两者都允许(即:不阻止)继续使用在构造函数中 ..
发布时间:2021-11-15 21:01:47 C/C++开发

在库的公共接口中使用 boost::shared_ptr

我们有一个 C++ 库,可以提供给多个不同的客户.最近,我们从在公共接口中使用原始指针转换为使用 boost::sharedptr.正如您可能猜到的那样,这提供了一个巨大的好处,因为现在客户不再需要担心谁需要删除什么以及何时删除.当我们进行转换时,我认为这是正确的做法,但让我烦恼的是我们必须在我们的公共界面中包含来自第三方库的内容 - 通常,如果可以的话,您应该避免这种事情.我认为 boost 现 ..
发布时间:2021-11-15 02:11:37 C/C++开发

将 shared_ptr 与向量一起使用时出现分段错误

我是第一次使用 shared_ptr,如果我犯了一个非常愚蠢的错误并帮助我克服这个分段错误,请原谅我. 我希望有一个私有的 vector,即使对象被销毁,它也可以从不同的类中读取.因此我读到了 std::shared_ptr 代码在 storeCounterData 函数中出现段错误 预先感谢您的帮助!!! main.cpp #include #include "coun ..
发布时间:2021-07-23 20:32:44 C/C++开发

std::shared_ptr 用其他 shared_ptr 数据初始化

我最近在使用新的 C++11 特性,例如 std::shared_ptr,因为我将 C 代码转换为类,并且在这段代码中大量使用了“老式"指针.我有一个疑问:在一个类的方法中,我使用本地 shared_ptr,我可以用传递给另一个 smart_ptr 的引用的数据初始化它们,然后修改数据吗?示例: void myFunction(std::shared_ptr &my_reference){std ..
发布时间:2021-07-23 20:32:41 其他开发

如何删除向量中的共享指针值

我已将共享指针类型定义为:typedef shared_ptrSptr; 然后是一个向量:vector向量; 现在我已经在一个向量中存储了几个共享指针,每个指针都指向一个动态分配的内存. 现在我想删除向量中的特定元素(子)(children.begin() 到 children.end()). ItemList::iterator it = find(children.begi ..
发布时间:2021-07-23 20:32:35 C/C++开发

以原子方式访问存储在地图中的资源

我想在映射中存储一些 std::shared_ptr 到 C++ 类实例,例如使用整数键的 std::map.但是,我需要这张地图有两个属性: 如果键不存在,则返回错误而不是创建新对象. 如果密钥确实存在,则以原子方式获取 std::shared_ptr 的副本.IE.应该不可能在一个线程中从地图中删除一个对象,同时在另一个线程中从地图中检索它. 如果可能的话,我想避免使用单个互斥锁 ..
发布时间:2021-07-23 20:32:32 C/C++开发

构建 shared_ptr 时遇到问题

我是智能指针的新手,我正在努力解决每一个绊脚石. 我有一个结构texture_t: struct texture_t{hash32_t 哈希;uint32_t 宽度;uint32_t 高度;uint32_t 句柄;}; 当我尝试使用此行创建此结构的 shared_ptr 时: auto texture_shared_ptr = std::make_shared(new texture_ ..
发布时间:2021-07-23 20:32:29 C/C++开发