smart-pointers 相关问题

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

std::unique_ptr 如何在闭包上应用 EBO?

#包括 #包括 int main(){ 自动x1 = [](int *p){ 删除(p); }; 自动 ptr = std::unique_ptr(new int{1},x1); printf("%zu\...

回答 1 投票 0

使用unique_ptr来控制文件描述符

理论上,我应该能够使用自定义指针类型和删除器,以便 unique_ptr 管理不是指针的对象。我尝试了以下代码: #ifndef UNIQUE_FD_H #定义

回答 9 投票 0

复制传递给基类的shared_ptr

所以我有一个小的类层次结构,我需要将一个shared_ptr传递给接受右值的基类。然而,在其中一种情况下,我想获取shared_ptr以用于其中一个

回答 1 投票 0

如何返回结构体指针数组?

我想返回一个结构体指针数组。 我希望结构指针数组可以在主函数中访问。但它总是会破裂。我尝试过使用智能指针,但似乎...

回答 1 投票 0

在程序中调用 execv() 时智能指针的内存何时被清除?

我试图了解在从代码中调用 execv() 时共享(智能)指针拥有的内存何时被清除。 假设以下代码: #包括 类测试 { public: ~...

回答 1 投票 0

用新内存覆盖“对象管理共享指针”C++

我有一个简单的代码,如下所示,我正在试验 - #包括 #包括 类测试类{ 民众: TestClass(int a, int b) : mA(a), mB(b) { 标准...

回答 1 投票 0

Qt::make_shared 用于创建 QSharedPtr 作为 std::make_shared 用于创建 std::shared_ptr

正如 Bjarne Stroustrup 的《C++ 之旅》中所述,作为一种已知的 C++14 实践,应该避免在代码中使用裸露的 new 和删除。标准库为

回答 1 投票 0

unique_ptr声明后如何赋值?

#包括 #include // unique_ptr 使用命名空间 std; int main() { std::unique_ptr char_ptr; char_ptr = (char*)"anisha"; 返回0; } 我是...

回答 3 投票 0

静态函数的共享指针

我正在尝试通过使用智能指针来改进我的编码,并且目前正在尝试使用智能指针替换我们遗留代码库中的所有旧原始指针(std::unique_ptr 和 std::

回答 1 投票 0

C++ std:.auto_ptr 或 std::unique_ptr (支持多个编译器,甚至是旧的 C++03 编译器)?

我正在尝试更新一些C++代码,我想转向更现代的代码(c++11),但我仍然需要使用一些较旧的编译器(兼容c++03)来编译代码,因为支持的平台

回答 3 投票 0

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

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