smart-pointers 相关问题

一种抽象数据类型,它在提供附加功能时模拟指针,例如自动垃圾收集或边界检查

shared_ptr 和 unique_ptr:关于具体案例的问题

我想定义两个类 A 和 I,使其对象尊重这种关系: i1 ------------a1 |------a2 |----a3 I 类的一个实例指向 0、1、...

回答 2 投票 0

多个shared_ptr指向同一个对象

出于学习目的,我现在正在编码二叉搜索树旋转。 我通常使用 std::unique_ptr 但这次我使用 std::shared_ptr 这可以正确工作: // 节点实现 模板<

回答 1 投票 0

是否需要通过引用传递智能指针对象?

假设我有一个类,其中包含一个智能指针作为其成员变量: B 级; A类{ 民众: A(const std::shared_ptr& b) : b_(b) {} // 选项1:通过引用传递 ...

回答 2 投票 0

如何将“this”指针与智能指针一起使用

我有一个静态函数,我传递一个碰撞器,另一个碰撞器是它本身。我之前使用的是常规指针,并将其更改为shared_ptr。我找不到解决方案来如何将其作为...

回答 1 投票 0

将 boost intrusive_ptr 与不同 const-ness 进行比较

我想将 boost::intrusive_ptr 实例与基础类型的不同 const 性进行比较,但不幸的是,如果您取消注释该行,它就无法从框中工作: #包括 我想将 boost::intrusive_ptr 实例与基础类型的不同常量进行比较,但不幸的是,如果您取消注释该行,则它不起作用: #include <boost/intrusive_ptr.hpp> #include <memory> struct S {}; void intrusive_ptr_release(const S*){} int main() { boost::intrusive_ptr<const S> boost_const_ptr; boost::intrusive_ptr<S> boost_ptr; // if(boost_const_ptr < boost_ptr) {} // <------ here const S* s_const_ptr; S* s_ptr; if(s_const_ptr < s_ptr) {} std::unique_ptr<const S> u_const_ptr; std::unique_ptr<S> u_ptr; if(u_const_ptr < u_ptr) {} } 错误将是: no match for 'operator<' (operand types are 'boost::intrusive_ptr<const S>' and 'boost::intrusive_ptr<S>') 我可以比较原始指针,甚至可以比较 std::unique_ptr,但不能比较 boost::intrusive_ptr。这是有原因的,还是只是疏忽? 一个可能的原因是,与 shared_ptr < would be impossible in general. Other smart pointer types don't have to deal with the possibility of heterogenous comparison1 具有相同的语义,但 shared_ptr、weak_ptr 和 intrusive_ptr 可以。 template<class T, class U> bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b) noexcept; 退货: 未指定的值使得 operator< 是严格的弱排序,如 C++ 标准的 [lib.alg.sorting] 部分所述; 在operator<、!(a < b) && !(b < a)定义的等价关系下,两个shared_ptr实例是等价的当且仅当它们 共有所有权或两者都是空的。 shared_ptr 可以通过比较引用计数的地址来做到这一点。 intrusive_ptr 不能这样做,因为它没有对引用计数的指针访问。 例如当您将 shared_ptr<Base> 与 shared_ptr<Derived> 进行比较时,它们可能共享同一对象的所有权,这对于 unique_ptr<Base> 和 unique_ptr<Derived> 来说是不可能的。

回答 1 投票 0

具有预定义最大使用次数的共享指针

有没有一种方法可以实现具有编译时已知的最大引用计数的共享指针(可能使用 unique_pointer)?我的情况是 max_ref_count = 2。 const auto p = std::make_shared&...

回答 1 投票 0

如何与盒装枚举进行模式匹配?

我有一个枚举,我必须在其中执行模式匹配。但由于我在堆栈内存有限的虚拟机上运行程序(< 4Kb ), i allocated the enum on the heap using Box. But while

回答 1 投票 0

C++ 原子为shared_ptr 实现正确的内存顺序和线程防护

学习 std::atomic 和 std::memory_order 后,我想尝试使用基于 Microsoft 博客的原子来编写线程安全的共享指针和weak_ptr实现:In...

回答 1 投票 0

Qt 与 RAII 设计模式不兼容吗?

良好编码实践的一个重要经验法则是 每个新的都必须与删除相匹配 在上一个问题中讨论过。通常,我们将此规则封装在 RAII 类中,例如 std::

回答 1 投票 0

Qt 中的 RAII(标题必须至少 15 个字符。)

良好编码实践的一个重要经验法则是 每个新的都必须与删除相匹配 在上一个问题中讨论过。通常,我们将此规则封装在 RAII 类中,例如 std::

回答 1 投票 0

可以保存 Rc<RefCell<T>> 或 Arc<RwLock<T>>

我正在努力在 Rust 中实现一个能够保存 Rc> 或 Arc> 的结构。 这样设计的动机是为了让用户使用

回答 1 投票 0

为什么我不能将元素推回到向量指针中? [已关闭]

我的代码如下: #包括 int main() { std::向量 *vec; vec->push_back(1); 返回0; } 无论我尝试哪个编译器,这个程序都会出现段错误...

回答 1 投票 0

Rc 或 Arc 是否有克隆底层值并将其返回给调用者的操作?

我正在寻找大致类似这样的东西,但是原子的: 为 Arc 实现 { fn take(mut self) -> T { Arc::make_mut(&mut self); 弧::try_unwrap(...

回答 3 投票 0

如何创建一个智能指针,指向带有嵌入切片的未调整大小的类型?

我试图通过使用 C 的灵活数组成员之类的东西来避免多次堆分配。为此,我需要分配一个未调整大小的结构,但我没有找到任何方法通过智能来做到这一点

回答 2 投票 0

线程和共享指针

新的智能指针可以正确地与线程一起使用吗? 例如,一个线程创建了指针的副本,而另一个线程正在处理中,从而搞乱了引用计数?

回答 1 投票 0

使用智能指针在 C++ 中的直接无环图中连接父/子会导致 SIGSEGV

我正在尝试用 C++20 构建 DAG。每个节点都有多个子节点和父节点。作为 MWE,每个节点都可能计算一些值。 此代码来自 Java 世界,可以按预期工作: 导入j...

回答 1 投票 0

Rc<[T]> try_unwrap 到 Vec<T>

是否有像 try_unwrap 这样的函数可以让我从 Rc 获取切片? 或者我是否必须手动检查引用计数并使用不安全的指针魔术来实现此目的? 编辑:看起来...

回答 1 投票 0

相当于智能指针中的指针

我是指针新手,所以请考虑以下代码 #包括 #包括 int main() { 双 xNormal{5}; 双 * pNormal = &xNormal; x法线 = 10; ...

回答 2 投票 0

析构函数意外调用

为什么这段简单代码中的析构函数 ~TestClass() 被调用了两次? #包括 #包括 #包括 测试类 { int m_val; 民众: 测试类(我...

回答 2 投票 0

尝试添加带有附加智能指针的向量

我正在尝试通过使用智能指针来处理内存管理来提高我的编码技能,并创建了一个简单的程序来添加两个 2D 向量结构的组件并将其保存到第三个 2D 向量...

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.