smart-pointers相关内容

在运行时有条件地实例化模板

我有一个模板类 模板类我的类{民众:/* 职能 */私人的:typename T::Indices myIndi​​ces;}; 现在在我的主代码中,我想根据条件实例化模板类.喜欢: myFunc(int 操作){开关(操作){案例0://使用 实例化 myClassauto_ptr >ptr = new myClass();情况1://使用 实例化 myClassaut ..
发布时间:2021-09-04 20:53:06 C/C++开发

指向容器的智能指针

虽然通过引用发送 stl 容器并不安全.用智能指针包装stl容器作为函数参数发送是否有意义? template void f(const std::unique_ptr up) {...}std::unique_ptr>大批;f(std::move(array)); UPD:好的,让我们缩小问题的范围.我正在制作某个类的实例.我应该用容器构造它: class MyClass {民众:MyCl ..
发布时间:2021-08-30 19:25:33 其他开发

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

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

如何正确访问 RefCell 中的值

我正在尝试在 Rust 中围绕 Rc 和 RefCell.我想要实现的是对同一对象有多个可变引用. 我想出了这个虚拟代码: 使用 std::rc::Rc;使用 std::cell::RefCell;结构人{名称:字符串,母亲:Option>,父亲:Option>,合作伙伴:Option>}酒吧 fn 主 () {让 mut susan = 人 {名称:“苏珊".to_string(),妈妈 ..
发布时间:2021-07-13 21:17:24 其他开发

如何从 Rc<RefCell<A> 获得 &A 引用?

我有一些设计问题,我想用安全的 Rust 来解决,但我一直无法找到可行的解决方案.我不能使用 RefCell 因为你不能得到 &引用数据,只有Ref/RefMut. 这是一个 简化示例删除了不相关的字段/方法 使用 std::cell::RefCell;使用 std::rc::Rc;struct LibraryStruct {}impl 库结构 {fn 函数(&self, _a: &Tra ..
发布时间:2021-07-13 20:53:18 其他开发

为什么 std::rc::Rc<>不复制?

有人可以向我解释为什么 Rc 不是 Copy 吗? 我正在编写使用大量共享指针的代码,并且必须一直键入 .clone() 使我很紧张. 在我看来 Rc 应该只包含一个指针,它是一个固定大小,所以类型本身应该是 Sized,因此 复制,对吗? 我错过了什么吗? 解决方案 在我看来 Rc 应该只包含一个指针,它是一个固定大小,所以类型本身应该是 Sized,因此 ..
发布时间:2021-07-13 20:36:14 其他开发

Rc<RefCell<T>和Rc<RefCell<T>之间有什么区别?和RefCell Rc T ?

Rust 文档涵盖了 Rc> 相当广泛,但没有涉及 RefCell>,我现在就是遇到. 这些是否有效地给出了相同的结果?它们之间有重要区别吗? 解决方案 这些是否有效地给出了相同的结果? 它们非常不同. Rc 是一个拥有共享所有权的指针,而 RefCell 提供内部可变性.它们的组成顺序对它们的使用方式有很大的不同. 通常,您将它们组合为 Rc>;整个事情都是共 ..
发布时间:2021-07-13 20:36:11 其他开发

如何使用 std::vector 防止内存重新分配

我已经阅读了很多问题,但没有人针对我的具体情况回答我. 其实我有 std::vector积分;std::vector三角形; Point2Dd 是一个二维点的类,指定它是如何实现的并不重要. 然而,三角形的实现方式如下: 类三角形{上市:三角形();三角形(Point2Dd* p1,Point2Dd* p2,Point2Dd* p3);//吸气剂 &二传手私人的:Point2Dd ..
发布时间:2021-06-18 19:59:13 C/C++开发

如何在不复制内容的情况下对实现 Deref 的类型(例如 Box)内的值进行模式匹配?

我的数据包含在 Box 中,并且希望在不意外地将 Box 的内容从堆复制到堆栈的情况下对其进行模式匹配;我该怎么做? 让我们假设以下代码: enum SomeEnum {一些条目,另一个条目,}fn 主(){让 boxed_value = Box::new(SomeEnum::AnotherEntry);匹配 *boxed_value {SomeEnum::SomeEntry =>{}So ..
发布时间:2021-06-14 20:16:56 其他开发

在线程函数和普通函数中将 shared_ptr 传递给 weak_ptr 时的不同行为

我有一个线程函数,它需要一个 weak_ptr 并且我在线程函数中传递了我的 shared_ptr. 从法律上讲,weak_ptr 不应该增加 shared_ptr 的引用计数,但是,除非我使用 weak_ptr 进行类型转换,同时将其传递给线程函数,否则它会增加引用计数(意外) 此行为仅发生在线程函数中,而不发生在普通函数调用中. 这是线程函数的代码 void thrdfn( ..
发布时间:2021-06-04 20:12:35 C/C++开发

在 C++ 中将具有 unique_ptr 的对象推入向量

我有一个简单的类结构,对离散模拟进行建模,带有一个状态向量,每个状态包含许多转换,作为智能指针的向量.我使用智能指针来保存转换,因为在我的完整应用程序中我需要多态性. #include #include 类转换{上市:过渡() {}};类状态{上市:State(int num) : num(num), transitions() {}void add_transition(std::unique ..
发布时间:2021-06-04 18:31:16 C/C++开发

如何使用智能指针围绕 C“对象"实现包装器?

我正在使用一个 C 库,它使用来自 C++ 的原始指针.因此,我正在考虑将所有指向 C 对象的指针包装在 C++ 类中并将它们转换为智能指针.我已经建立了一个工作示例: #include 使用命名空间标准;//C 库是 oop:使用结构和命名约定.像这样://C 库声明struct Animal_s {年龄;};typedef struct Animal_s 动物;动物* make_animal ..
发布时间:2021-06-02 19:36:51 C/C++开发