smart-pointers 相关问题

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

从 std::map() 获取具有 unique_ptr 成员的对象

我试图从 std::map (之前填充的)获取一个类对象(带有 unique_ptr 成员),并且发生错误。这是代码: 类.hpp #ifndef CLASSMETHODNOTCALLED_CLASSES_HPP #定义

回答 1 投票 0

如何返回 const 类型的 unique_ptr 引用

我想要一个成员函数返回对 const 类型的 unique_ptr 引用,就像在原始指针中一样。 我的意思是: 类 Foo { 私人的: int_number; 民众: [[不丢弃]]

回答 1 投票 0

使用 std::shared_ptr 时 C++ 中的段错误

在下面的代码中,使用 std::shared_ptr 时出现分段错误。然而,当使用普通指针时,不会出现同样的问题。 综上所述,我想定义一个 ConstrainedVariable ob...

回答 1 投票 0

默认构造的(空)shared_ptr会自动初始化为nullptr吗?

我从一些博客中读到,默认构造的(空)shared_ptr 会自动初始化为 nullptr。但在标准中找不到任何此类明确的声明。 我写了一个小sni...

回答 2 投票 0

从 unique_ptr 初始化 share_ptr<T[]> 时出现“没有匹配的初始化构造函数”的构建错误<T[]>

首先,我阅读了这个答案,以了解为什么我们有时想要将 unique_ptr 转换为共享_ptr。然后,我按照 cppreference shared_ptr 上的转换构造函数的说明进行操作。 在 C+ 中...

回答 1 投票 0

尝试用 A* 解决大型迷宫时出现 SIGSEGV

我正在用 C++ 实现 A* 寻路算法来解决迷宫问题,但当迷宫尺寸较大(~10,000x10,000 或更大)时,我遇到了分段错误 (SIGSEGV)。 错误发生在...

回答 2 投票 0

插入链表哪个智能指针来保持多态性?

我正在编写一个简单的编译器,我有一个基类: 课堂教学 { 民众: 虚拟 std::string get_name() const = 0; }; 我创建一条指令,例如计算: 计算类 : 酒吧...

回答 1 投票 0

如何将unique_ptr移动到原始指针?

我有一个函数,用于分配给定大小的缓冲区。返回之前,缓冲区将被预处理/填充一些数据。这个预处理可能会返回 false 来表示这个缓冲区不是

回答 3 投票 0

如何将协变返回类型与智能指针一起使用?

我有这样的代码: 类 RetInterface {...} 类 Ret1:公共 RetInterface {...} A类接口 { 民众: 虚拟 boost::shared_ptr get_r() const = 0; ... ...

回答 7 投票 0

将 unique_ptr 推入变体 unique_ptr 的向量中

我正在玩c++并遇到这个问题 如果我有一个看起来像这样的变体: 使用水果=变体 和一个变量的 unique_ptr 向量: 矢量 我正在玩 C++ 并遇到这个问题 如果我有一个如下所示的变体: using Fruit = variant<Apple, Tomato> 以及变体的 unique_ptr 向量: vector<unique_ptr<Fruit>> fruits 如何将 unique_ptr<Apple> 移动到 fruits 向量中? 这是一段示例代码: #include <variant> #include <memory> using namespace std; struct Apple {}; struct Tomato {}; using Fruit = variant<Apple, Tomato>; int main() { vector<unique_ptr<Fruit>> fruits; unique_ptr<Apple> apple = make_unique<Apple>(); fruits.push_back(unique_ptr<Fruit>(move(apple))); // error here } 在致电 push_back 时,我收到此错误: No matching conversion for functional-style cast from 'remove_reference_t<unique_ptr<Apple, default_delete<Apple>> &>' (aka 'std::unique_ptr<Apple>') to 'unique_ptr<Fruit>' (aka 'unique_ptr<variant<Apple, Tomato>>') 如果我将行更改为fruits.push_back(unique_ptr<Apple>(move(apple)));,我会收到此错误: No matching member function for call to 'push_back' 如果我将其更改为fruits.emplace_back(unique_ptr<Apple>(move(apple)));,则不会发生错误。 那么使用 emplace_back 是正确的选择吗?为什么会出现这个错误?我假设这是因为我无法将 unique_ptr<VariantMemberType> 投射到 unique_ptr<VariantType>? Fruit 与 Apple 无关。 Fruit 可能包含 Apple。无法将指向 Apple 的指针转换为指向 Fruit 的指针,就像无法将指向 int 的指针转换为指向 std::set<int> 的指针一样。最好的方法是创建一个新的 Fruit 对象,并将 apple 指向的值移动到新的 Fruit 中。 #include <memory> #include <variant> #include <vector> struct Apple {}; struct Tomato {}; using Fruit = std::variant<Apple, Tomato>; int main() { std::vector<std::unique_ptr<Fruit>> fruits; std::unique_ptr<Apple> apple = std::make_unique<Apple>(); fruits.push_back(std::make_unique<Fruit>(std::move(*apple))); } 请注意,我们现在用 Fruit 创建一个新的 std::make_unique 并移动 apple 指向的对象的值,而不是移动指针。值得注意的是,您现在将有一个由 Apple 指向的移自 apple。您需要其生命周期结束,您需要手动重置指针。

回答 1 投票 0

返回对托管内存的引用是一种不当行为吗?

给出以下代码: 类克拉兹{ 私人的: std::shared_ptr 一些东西; 民众: Clazz() : 某事(std::make_shared(0)) {} int &getSomething() { 返回*一些东西...

回答 1 投票 0

如何在C++中返回智能指针和协方差

我正在遵循本教程来了解如何在 C++ 中返回智能指针和协方差。 #包括 #包括 可克隆类 { 民众: 虚拟~

回答 1 投票 0

为什么 Rust 编译器会按照声明的相反顺序删除未使用的变量?

在 Rust 书中,第 15 章第 3 节提供了一个示例,以显示 Rust 何时对变量 c 和 d 运行 drop 函数。 结构自定义智能指针{ 数据:字符串, } impl Drop for

回答 1 投票 0

是否可以将C++智能指针与C的malloc一起使用?

我的一些代码仍然使用malloc而不是new。原因是因为我害怕使用 new,因为它会抛出异常,而不是返回 NULL,我可以很容易地检查它。包裹每一个...

回答 10 投票 0

如何在 C++ 中为自定义 UniquePtr 类实现运算符->?

我正在尝试用 C++ 编写自己的 unique_ptr 实现,这是我的 UniquePtr 头文件: #包括 模板 类 UniquePtr { T* 指针; 民众: ...

回答 1 投票 0

将电缆捕获 `std::initializer_list<std::shared_ptr<Conversation>>` 传递给完整处理程序时的奇怪行为

下面的代码片段总是在客户端连接到服务器时立即关闭连接,这确实出乎我的意料。 #包括 #包括 #包括...

回答 2 投票 0

链表从原始指针到智能指针的转变

如何实现我的链表代码从原始指针到智能指针。任何指导方针都会有所帮助。这是我的代码。 其实我对智能指针的类型更困惑。共享或...

回答 1 投票 0

其他SO中提到的代码片段中的数据竞争,无法同时调用读/写

下面的代码可以在这个SO中看到,除了原始问题中的评论已被删除。 std::weak_ptr g_w; 无效 f3() { std::shared_ptrl_s3 = g_w.lock(); //2.这里...

回答 1 投票 0

如何实现std::weak_ptr::lock()以保证shared_ptr和weak_ptr可以从线程中使用而无需进一步同步

如何实现std::weak_ptr::lock()以保证shared_ptr和weak_ptr可以从线程中使用而无需进一步同步(参见示例代码)。 根据 cppreference,它说...

回答 1 投票 0

智能指针复制赋值

我需要以不允许超过3个引用的方式实现一个智能指针。 我的代码看起来像 模板 类 smartptr{ smartptr():ptr(0), 计数器(新 int){ ...

回答 1 投票 0

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