shared-ptr相关内容

Make_shared - 自己的实现

我正在尝试自己实现 shared_ptr.我在使用 make_shared 时遇到问题.std::make_shared 的主要特点是在连续的内存块中分配计数器块和对象.我怎么能做同样的事情? 我尝试做这样的事情: template类 shared_ptr{私人的:_ref_cntr 类{私人的:长计数器;民众:_ref_cntr() :计数器(1){}无效公司(){++计数器;}无效十二 ..
发布时间:2021-07-23 20:31:08 C/C++开发

同时重置和复制 shared_ptr 是否线程安全?

Boost 文档 描述了共享指针的行为同时从多个线程访问它时.特别是他们举了一些例子: shared_ptrp(new int(42));//--- 示例 1 ---//线程Ashared_ptrp2(p);//读取 p//线程Bshared_ptrp3(p);//好的,多次读取是安全的//--- 示例 2 ---//线程Ap.reset(new int(1912));//写 p//线程Bp2. ..
发布时间:2021-07-23 20:31:02 C/C++开发

C++11 std::shared_ptr + boost::serialization

嗨,有人已经设法使用 boost::serialization 序列化 C++11 std::shared_ptr.有很多过时的帖子,但没有一个可以接受的解决方案.我不打算讨论为什么我要使用 std::shared_ptr 接受它! 我发现了另一个帖子:boost serialize 和 std::shared_ptr 但它没有回答我的问题如何序列化 std::shared_ptr 它只建议 ..
发布时间:2021-07-23 20:30:59 C/C++开发

为什么 shared_ptr 类型没有模板分配器参数?

shared_ptr 定义为 模板类 shared_ptr; 自定义分配器作为构造函数参数传递 模板shared_ptr( Y* ptr, Deleter d, Alloc alloc ); 为什么没有 模板>类 shared_ptr; ? 我觉得这在某些情况下会让生活更轻松,但另一方面它会阻止执行以下操作: 命名空间应用{模板 使用 Shared = std::shared_ ..
发布时间:2021-07-23 20:30:54 C/C++开发

shared_ptr 和切片

与我共事的人曾经说过 shared_ptr 是不安全的,并且会在从派生类转换到基类(即向上转换)时进行切片.例如,如果有 2 个类 A 和 B,其中 B 派生自 A,则 shared_ptr一个(新B) 会切片.我向他指出 http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/shared_ptr.htm它说的地方 shared_ptr ..
发布时间:2021-07-23 20:30:51 C/C++开发

库中类型不完整的 shared_ptr

我的问题很简单:我正在使用 SDL 创建一个简单的模拟,我想将 TTF_Font 类型的实例存储在智能指针 (shared_ptr) 中,但我不断收到此错误: “对不完整类型‘_TTF_Font’的‘sizeof’无效应用" 有没有办法在不将其源代码合并到我的程序中的情况下使用来自外部库的不完整类型的智能指针? 编辑: TTF_Font 被声明为 typedef stru ..
发布时间:2021-07-17 19:32:11 C/C++开发

通过采用 void * 的 C 接口传递 shared_ptr

我有一个使用 SDL 的 C++ 项目,特别是 SDL 事件.我想将事件系统用于传入的网络消息,就像它用于 UI 事件一样.我可以定义新的事件类型并附加一些任意数据(请参阅此示例).如果我使用普通指针,我会这样做: Uint32 message_event_type = SDL_RegisterEvents(1);/* 在主事件循环中 */而 (SDL_Poll(&evt)) {如果(evt.t ..
发布时间:2021-07-17 19:31:26 C/C++开发

在构造函数中注册weak_ptr观察者

我正在尝试重写我们的Observer/Observable实现,以使用std :: shared_ptr/std :: weak_ptr摆脱代码中当前存在的某些讨厌的竞争条件. 通常,观察者在满足某些条件时或在构造子对象时进行注册,例如: //以前是原始的'this',现在,子级派生weak_ptr并将其存储子> addObserver(shared_from_this()) 然后像下 ..
发布时间:2021-05-30 19:24:57 C/C++开发

使用带有参数的boost :: function共享指向派生类的指针

在Ubuntu 16.04上将C ++与g ++ 5.4.0结合使用. 我有一个类A和一个从类A派生的类B.函数f1将指向类A的共享指针作为参数.函数f2将指向类B的共享指针作为参数,并返回与f1相同的类型.使用boost :: function,另一个函数F将f1之类的函数作为参数.代码如下: result_t f1(const boost :: shared_ptr a);r ..
发布时间:2021-04-30 19:22:17 C/C++开发

将shared_ptr与指向指针的指针一起使用时发生编译器错误

我不熟悉在C ++中使用智能指针,而当前的问题是我正在将C代码转换为C ++(C ++ 11/14/17),并且在理解使用shared_ptr和指针指针时遇到一些问题.我得到了一个玩具示例,我相信它可以说明问题 以下是头文件 #include使用std :: shared_ptr;struct DataNode{shared_ptr下一个;};结构 ..
发布时间:2021-04-23 20:05:25 C/C++开发

如何阻止使用std :: make_shared< T>

我知道我可以通过将类的 operator new 设为私有来防止自定义类及其后代的普通堆分配,但是有什么方法可以防止库的用户调用 std::自定义类(或其后代)上的:: make_shared ?显然,仅在类中将 operator new 设置为私有并不能阻止它. 请注意,我不想完全阻止以任何方式创建共享指针,因为我打算仍然能够通过调用静态方法来为自定义类生成 std :: shared_p ..
发布时间:2021-04-20 18:56:02 C/C++开发

智能指针可以隐式用作指针吗?

智能指针是否被视为指针?因此它们可以隐式用作指针吗? 假设我有以下课程: class MyClass {//...std :: shared_ptrfoo(){/*任何内容*/};void bar(AnotherClass * a){/*其他也*/};//...} 那么我可以通过以下方式使用 MyClass 吗? //m是MyClass的实例m.bar ..
发布时间:2021-04-20 18:50:33 C/C++开发

make_shared()的可调试替换

使用gcc 4.6.2,如果构造函数引发异常,make_shared()会给出无用的回溯(显然是由于重新抛出).我正在使用make_shared()节省一些键入内容,但这是show stopper.我创建了一个替代 make_shrd(),它可以进行正常的回溯.我正在使用gdb 7.3.1. 我担心: make_shared()下不好的回溯是我自己的错 我的替代品make_shrd( ..
发布时间:2021-04-20 18:45:55 C/C++开发

有可能使用shared_ptr的对象池模式吗?

是否可以创建一个shared_ptr的对象池?在脑海中画出草图,我可以看到两种方法,但是每种方法都有缺陷: 如果将T对象存储在可重用的池中,则在get()请求上将T包装在shared_ptr中的行为将导致控制块每次都在堆上重新分配-因此,打破了概念对象池. 如果将shared_ptr对象存储在可重用的池中,则shared_ptr对象必须停止存在才能启动自定义删除器,并且仅使用T指针调用 ..
发布时间:2021-04-20 18:36:31 C/C++开发