shared-ptr相关内容

何时使用虚拟析构函数?

我对大多数 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#

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

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

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

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

unique_ptr 的 static_pointer_cast 的替代方案

我了解将 static_pointer_cast 与 unique_ptr 结合使用会导致所包含数据的共享所有权. 换句话说,我想做的是: unique_ptrfoo = fooFactory();//做一些事情一段时间unique_ptrbar = static_unique_pointer_cast(foo); 无论如何这样做会导致两个 unique_ptr 不应该同时存在,所以它是被禁 ..
发布时间:2021-09-14 18:41:43 其他开发

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

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

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 其他开发

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

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

构建 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 其他开发

make_shared 不与 enable_shared_from_this 一起玩?

考虑以下两个代码片段,第一个: #include "pch.h"#include #include 使用 boost::asio::ip::tcp;tcp_connection 类:公共 std::enable_shared_from_this{民众:typedef std::shared_ptr指针;静态指针创建(boost::asio::io_service& ..
发布时间:2021-07-23 20:32:26 其他开发

初始化 shared_ptr ,当对象需要默认构造函数时

为了将 shared_ptr 分配给柠檬图形库中的图形类型变量,我这样做了: typedef ListDigraph Graph;typedef std::shared_ptr进程指针;Process_pointer process(new Graph); 它工作正常,但现在我需要为地图对象声明一个 shared_ptr,通常地图对象的工作方式如下: 图流程;typedef ListDigr ..
发布时间:2021-07-23 20:32:23 其他开发

shared_from_this 使用 boost::asio 抛出 bad_weak_ptr

首先,我已阅读列出的所有相关问题. 他们说,“在你可以使用 shared_from_this 之前,你必须有一个现有的 shared_ptr."据我所知,我没有办法违反该条件.我将 Foo 的实例创建为 shared_ptr 并强制它始终创建为 shared_ptr.然后,我将 shared_ptr 存储在一个集合中.然而,当调用 shared_from_this 时,我仍然收到 bad_w ..
发布时间:2021-07-23 20:32:19 其他开发

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

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

在 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 其他开发

异常: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 其他开发

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 其他开发