smart-pointers相关内容

使用shared_ptr获得唯一所有权(种类)-这是一种好习惯吗?

这很难解释,但我会尽力而为.因此,我有一个RenderComponent,EventManager和RenderSystem.在我的RenderComponents构造函数中,我引发RenderSystem订阅的renderComponentCreated事件.使用事件args对象,我将一个RenderNode作为数据传递,该数据包含renderSystem绘制事物所需的信息(可绘制,位置和类型) ..
发布时间:2021-04-19 18:54:05 C/C++开发

如何将shared_ptr传递给具有较低生存期的类?

我想优化我的代码.我有一个具有shared_ptr数据成员的类.在此类的某些方法中,我创建了需要使用该成员的对象(只是从shared_ptr指向的对象中获取信息).我知道这些创建的对象的生命周期比我的主类要短.如何传递该指针?我认为不需要另一个shared_ptrs(因为我保证该对象将存在).那么,应该如何创建我创建的类?他们应该得到原始指针吗?Weak_ptr?还是最好的解决方案是获取share ..
发布时间:2021-04-19 18:53:37 C/C++开发

从std :: unique_ptr数组获取原始指针数组

我有一个库函数,需要四个指针数组作为参数: f(unsigned char * data [4]),并且我的代码中有一个智能指针数组: std :: unique_ptrmyArray [4] . 是否可以通过此库函数使用智能指针? 我已经尝试过了,但是它给了我一个段错误: f(reinterpret_cast(my ..
发布时间:2021-04-09 20:48:30 C/C++开发

C ++将类的指针分配给unique_ptr或shared_ptr

我有一个要从其继承的基类,并且在可以声明其任何派生类之前,必须至少声明一个该基类的实例.我正在考虑将基类的this pointer存储到其自己的unique_ptr成员变量中,而不是使用static_ptr.同样,基类将跟踪其派生类的所有实例,直到声明另一个基类为止.这是我的类声明的样子: #include #include #include ..
发布时间:2020-11-28 00:18:25 C/C++开发

在C ++中使用unique_ptr的工厂模式

我在C ++中有一个旧的工厂实现,我想在其中使用唯一的指针而不是原始指针.我的代码的一个最小示例如下.我有一个基类A和一个派生类B.在main()中,我将1传递给A中的create方法,并且b1的类型现在更改为B. #include #include class A { public: A() {} virtual void Foo() {} ..
发布时间:2020-11-03 22:06:16 C/C++开发

在不使用弱指针的情况下解决智能指针循环引用

假设我们有一个设计,其中一个对象集合可能对该集合中的其他对象具有往复依赖关系: struct Object { ... 虚拟void方法(); private: std :: vector>兄弟姐妹; }; 允许出现循环引用(并不代表退化的情况)。通常,循环引用将通过弱指针来解决,但这需要所有权的层次结构 ..

具有实物代表的所有权

在阅读RAII之后,查看 Herb Sutter的CppCon2014演示文稿,然后阅读核心指南和相关 文章几天来,我仍然对所有权和相关语义感到困惑。 假设类A和类B代表物理实体,并且有一个Scene类和一个Process类。如果愿意,Process类是一个 main 函数。在现实世界中,A可以获取B并实际保留它。它也可以释放它。因此,在Process实例的过程中,A对象必须能够拥有一个B实 ..
发布时间:2020-09-28 01:02:11 C/C++开发

如何使用weak_ptr强制执行单一所有权? (或者,如何子类shared_ptr和重写dtor)

因此,我已经做了(少量)阅读,并且知道与原始指针结合使用的unique_ptr 是建模唯一所有权时要使用的模式。 但是,我真的很喜欢简单而清晰的概念,即使用weak_ptr来检查值是否有效,然后在使用完后丢弃shared_ptr,这样可以使所有人 我现在的特殊问题是创建一个富有表现力且灵活的系统来跟踪多点触摸,使用起来似乎很优雅代表触摸的对象的破坏是触摸已结束的信号。如果我使用原始指针 ..
发布时间:2020-09-28 00:45:55 C/C++开发

c ++ 11功能的新功能,是否正确使用了shared_ptr?

因此,我的理解是,当对象的最后一个剩余所有者被销毁或重新分配时,shared_ptr会自动从内存中取消分配(似乎太好了,难以置信吗?),当许多实例共享同一对象时,它很有用。是吗? 因此,在我的情况下,我正在制作2D平铺的世界,所以我要在屏幕上绘制许多相同的纹理。 我有 std :: map> Tiledb; 存储所 ..
发布时间:2020-09-27 23:35:44 C/C++开发