smart-pointers相关内容
我有一个模板类 模板类我的类{民众:/* 职能 */私人的:typename T::Indices myIndices;}; 现在在我的主代码中,我想根据条件实例化模板类.喜欢: myFunc(int 操作){开关(操作){案例0://使用 实例化 myClassauto_ptr >ptr = new myClass();情况1://使用 实例化 myClassaut
..
虽然通过引用发送 stl 容器并不安全.用智能指针包装stl容器作为函数参数发送是否有意义? template void f(const std::unique_ptr up) {...}std::unique_ptr>大批;f(std::move(array)); UPD:好的,让我们缩小问题的范围.我正在制作某个类的实例.我应该用容器构造它: class MyClass {民众:MyCl
..
我处于以下情况: 结构容器{数据*指针;};void someFunc(container* receiver/* 想要被填充 */) {auto myData = createData();//返回 shared_ptr接收器->ptr = myData.get();} 生成该数据的函数和接收它的对象是两个不同库的一部分,我无法修改其源代码.我必须处理这些数据类型,对此我无能为力. 所
..
我无法解决这个问题.. 看起来我错过了一些简单的东西?我在 MakePointToSameValue 中放了什么,以便在 (1) b.ptr 和 c.ptr 都指向与 a.ptr 相同的内容 换句话说,a.ptr.get() == b.ptr.get() == c.ptr.get() b.ptr 和 c.ptr 最初指向的值被删除 ? struct 测试{民众:测试(int va
..
我正在尝试在 Rust 中围绕 Rc 和 RefCell.我想要实现的是对同一对象有多个可变引用. 我想出了这个虚拟代码: 使用 std::rc::Rc;使用 std::cell::RefCell;结构人{名称:字符串,母亲:Option>,父亲:Option>,合作伙伴:Option>}酒吧 fn 主 () {让 mut susan = 人 {名称:“苏珊".to_string(),妈妈
..
我有一些设计问题,我想用安全的 Rust 来解决,但我一直无法找到可行的解决方案.我不能使用 RefCell 因为你不能得到 &引用数据,只有Ref/RefMut. 这是一个 简化示例删除了不相关的字段/方法 使用 std::cell::RefCell;使用 std::rc::Rc;struct LibraryStruct {}impl 库结构 {fn 函数(&self, _a: &Tra
..
我想在堆上有一个结构,有两个引用;一个给我,另一个来自关闭.注意代码是针对单线程情况的: 使用 std::rc::Rc;#[派生(调试)]结构 Foo {价值:u32,}impl Foo {fn set_val(&mut self, val: u32) {self.val = val;}}impl Drop for Foo {fn drop(&mut self) {println!("我们删除了
..
有人可以向我解释为什么 Rc 不是 Copy 吗? 我正在编写使用大量共享指针的代码,并且必须一直键入 .clone() 使我很紧张. 在我看来 Rc 应该只包含一个指针,它是一个固定大小,所以类型本身应该是 Sized,因此 复制,对吗? 我错过了什么吗? 解决方案 在我看来 Rc 应该只包含一个指针,它是一个固定大小,所以类型本身应该是 Sized,因此
..
Rust 文档涵盖了 Rc> 相当广泛,但没有涉及 RefCell>,我现在就是遇到. 这些是否有效地给出了相同的结果?它们之间有重要区别吗? 解决方案 这些是否有效地给出了相同的结果? 它们非常不同. Rc 是一个拥有共享所有权的指针,而 RefCell 提供内部可变性.它们的组成顺序对它们的使用方式有很大的不同. 通常,您将它们组合为 Rc>;整个事情都是共
..
为了防止范围蔓延(在上一个问题上),我隔离了上面的错误. 我的体素类定义: #ifndef VOXEL_H#define VOXEL_H#include #include #include 包括体素类:公共 QObject{Q_OBJECT上市:体素();~体素();};#endif//VOXEL_H 触发错误的主文件: #include int main(int argc,
..
我有一条简单的消息,其中包含许多重复的数字字段: syntax = "proto3";选项 cc_enable_arenas = 真;消息大数据{重复双信息 = 1;} 在运行时数据到达时已经分配.这是我尝试将其封装到消息中的方式(使用 arena): void set_data(std::unique_ptr table, int size, bigData* message){/* 假设
..
我已经阅读了很多问题,但没有人针对我的具体情况回答我. 其实我有 std::vector积分;std::vector三角形; Point2Dd 是一个二维点的类,指定它是如何实现的并不重要. 然而,三角形的实现方式如下: 类三角形{上市:三角形();三角形(Point2Dd* p1,Point2Dd* p2,Point2Dd* p3);//吸气剂 &二传手私人的:Point2Dd
..
我使用 unique_ptr 来管理一些资源,以便在任何情况下安全销毁,等等. void do_something(BLOB* b);unique_ptrb(new_BLOB(20)); &* 比 get 差很多吗?例如 do_something(&*b); 或 do_someting(b.get()); 两者似乎都有效. 解决方案 &*b 不一定等同于 b.get().为了确
..
我的数据包含在 Box 中,并且希望在不意外地将 Box 的内容从堆复制到堆栈的情况下对其进行模式匹配;我该怎么做? 让我们假设以下代码: enum SomeEnum {一些条目,另一个条目,}fn 主(){让 boxed_value = Box::new(SomeEnum::AnotherEntry);匹配 *boxed_value {SomeEnum::SomeEntry =>{}So
..
我有一个线程函数,它需要一个 weak_ptr 并且我在线程函数中传递了我的 shared_ptr. 从法律上讲,weak_ptr 不应该增加 shared_ptr 的引用计数,但是,除非我使用 weak_ptr 进行类型转换,同时将其传递给线程函数,否则它会增加引用计数(意外) 此行为仅发生在线程函数中,而不发生在普通函数调用中. 这是线程函数的代码 void thrdfn(
..
我有一个简单的类结构,对离散模拟进行建模,带有一个状态向量,每个状态包含许多转换,作为智能指针的向量.我使用智能指针来保存转换,因为在我的完整应用程序中我需要多态性. #include #include 类转换{上市:过渡() {}};类状态{上市:State(int num) : num(num), transitions() {}void add_transition(std::unique
..
我正在使用一个 C 库,它使用来自 C++ 的原始指针.因此,我正在考虑将所有指向 C 对象的指针包装在 C++ 类中并将它们转换为智能指针.我已经建立了一个工作示例: #include 使用命名空间标准;//C 库是 oop:使用结构和命名约定.像这样://C 库声明struct Animal_s {年龄;};typedef struct Animal_s 动物;动物* make_animal
..
我正在尝试实现一个链接列表,以了解Rust中的智能指针.我定义了一个 Node : 使用std :: {cell :: RefCell,rc :: Rc};结构节点{val:i32,下一个:Option> ;,} 并像 一样进行迭代 fn迭代(节点:Option& Rc>>)->Vec{令mut p
..
仅在应用某些条件的情况下,我才想创建一个对象,否则重新调整nullptr.这就是我在Delphi(2009+)中的处理方式: function GetGen(n:integer):Generics.Collections.TList0然后开始结果:= Generics.Collections.TList
..
我在上面的代码中遇到了VS调试器的问题: class Animal {上市:};愚蠢类{上市:};类别狗:公共愚蠢,公共动物{上市:};int main(){std :: unique_ptr动物= std :: unique_ptr(新Dog());animal.reset();返回0;} 此代码在执行涉及"ntdl.dll"和"wntdll.pdb"的"a
..