unique-ptr相关内容

智能指针在具有自动存储持续时间的对象上的使用

如果我将智能指针(scoped_ptr、unique_ptr或shared_ptr)应用到具有自动存储持续时间(即存储在堆栈上)的对象上,会有问题吗?我假设不会像在两种情况下那样(有或没有智能指针),如果没有更多的指针指向它们,它们将被删除。指针本身始终具有自动存储持续时间,即,如果超出范围,它们将被删除。 推荐答案 是,有一个问题(一个很大的问题):您正在使用智能指针做一些它们不是设 ..
发布时间:2022-05-12 15:38:02 C/C++开发

在集合之间移动 `unique_ptr`s

我有两个集合和一个 a 元素的迭代器: set>一,乙;set>::iterator iter = 在 a 中找东西; 我想从a中移除iter所指向的元素,并插入到b中.是否可以?怎么样? 解决方案 好吧,我怀疑没有正常的方法可以做到这一点.但总有一个不正常的:)您可以执行以下操作: auto tmp = const_cast 好的,第一行违反了 set ..
发布时间:2022-01-24 21:20:42 C/C++开发

指向向量和多态性的唯一指针

我有问题,我想创建指向 Base 对象向量的唯一指针.我想保留 Base 的这个向量子类(SubClass),但是初始化有问题,因为 Base 类是虚拟的. std::unique_ptr>baseVector = std::make_unique>();子类 newObject();baseVector->push_back(newObject); 解决方案 短版:你不想要一个指向 Bas ..
发布时间:2022-01-24 16:40:08 C/C++开发

为什么 unique_ptr<T>(T*) 是显式的?

以下函数无法编译: std::unique_ptr;富(){int* 答案 = 新 int(42);返回答案;}std::unique_ptr;酒吧(){返回新的int(42);} 我觉得这有点不方便.使 std::unique_ptr(T*) 显式的基本原理是什么? 解决方案 您不希望托管指针隐式地获取原始指针的所有权,因为这可能会导致未定义的行为.考虑一个函数 void f( ..
发布时间:2022-01-13 08:25:00 C/C++开发

unique_ptr 和 OpenSSL 的 STACK_OF(X509)*

我使用一些 using 语句和 unique_ptr 来处理 OpenSSL,如 在另一个问题中建议.否则,代码会变得非常丑陋,而且我不太喜欢 goto 语句. 到目前为止,我已经尽可能地更改了我的代码.以下是我使用的示例: using BIO_ptr = std::unique_ptr;使用 X509_ptr = std::unique_ptr;使用 EVP_PKEY_ptr = std ..
发布时间:2022-01-07 18:52:04 C/C++开发

带有 std::unique_ptr 的 stl 容器 vs boost::ptr_container

有了 c++11,我在问自己是否可以替代 c++11 中的 boost::ptr_containers.我知道我可以使用例如一个 std::vector;>,但我不确定这是否是一个完整的替代品.处理这些情况的推荐方式是什么? 解决方案 他们确实解决了两个相似但不同的问题. 指针容器是一种将对象存储在容器中的方法,这些对象恰好是指向已分配内存而不是值的指针.他们尽其所能隐藏一个事实,即 ..
发布时间:2022-01-07 11:29:00 C/C++开发

用智能指针实现一个简单的单向链表

嗨,我正在尝试使用智能指针实现一个简单的单链表,这是我到目前为止所拥有的,我选择使用 C++ 的 shared_ptr,但我读到 unique_ptr 更适合这种情况,但是,我不真的不知道您将如何遍历列表(即 currentNode = currentNode->next)以到达列表的末尾,以便使用 unique_ptr 插入一个元素.这是我到目前为止的代码: template 类链表;模板 类 ..
发布时间:2022-01-01 18:29:49 C/C++开发

unique_ptr 链表的堆栈溢出

我已经转换了以下链表结构 结构节点{下一个节点*;内部 v;}; 进入 c++11 版本 - 不使用指针. 结构节点{unique_ptr下一个;内部 v;}; 添加、删除元素和遍历工作正常,但是当我插入大约 100 万个元素时,在调用头节点的析构函数时会出现堆栈溢出. 我不确定我做错了什么. {节点 n;... 添加 10mill 元素} ..
发布时间:2022-01-01 18:09:22 C/C++开发

unique_ptr 的动态转换

和 Boost 一样,C++11 提供了一些用于转换 shared_ptr 的函数: std::static_pointer_caststd::dynamic_pointer_caststd::const_pointer_cast 然而,我想知道为什么 unique_ptr 没有等效函数. 考虑以下简单示例: class A { virtual ~A();... }B 类:公共 A { ..
发布时间:2021-12-31 22:01:41 C/C++开发