smart-pointers 相关问题

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


可以将拥有独特指针的对象指向?

i有以下最小可重复的示例,其中似乎不允许我的独特销售对象to包含一个独特的指针,指向另一个实例B::B 我期望以下会发生: i期望#include <iostream> #include <memory> struct C { virtual void say_name() = 0; }; struct A : public C { int value; A(int value) : value(value) {} void say_name() override { std::cout << "A" << value << std::endl; } }; struct B : public C { std::unique_ptr<C> ptr; B(std::unique_ptr<C> ptr) : ptr(std::move(ptr)) {} void say_name() override { std::cout << "B" << std::endl; } }; int main() { A a(5); B b(std::make_unique<A>(10)); // Here I create another B - causes error B b2(std::make_unique<B>(b)); } 拥有b,并且拥有a拥有b2。 ,但是,当我尝试创建b时,我会收到一条错误消息。 我不了解错误或如何修复它,并想了解我应该如何重组程序,以便我可以以这种方式嵌套对象。 there是完整的错误消息: a 问题是这样的表达: b2 试图创建B的副本。 中包含In template: call to implicitly-deleted copy constructor of 'B'clang(ovl_deleted_special_init) unique_ptr.h(767, 30): Error occurred here main.cpp(33, 13): In instantiation of function template specialization 'std::make_unique<B, B &, 0>' requested here main.cpp(24, 22): Copy constructor of 'B' is implicitly deleted because field 'ptr' has a deleted copy constructor unique_ptr.h(221, 55): Copy constructor is implicitly deleted because 'unique_ptr<C>' has a user-declared move constructor std::make_unique<B>(b) 不可版权,它仅是可移动的。因此,修复它的一种方法是移动b。 Bhttps://godbolt.org/z/qgge1qv8y其他方法可以提供自己的复制构造函数。问题是要存档您需要一种复制uniqe_ptr成员变量的方法。这可以通过将功能添加到B称为b:来完成。 B b2(std::make_unique<B>(std::move(b))); https://godbolt.org/z/em663yf1z 取决于您希望实现的目标,您必须选择适当的解决方案。

回答 1 投票 0

从智能指针中获取原始指针

在这里:在follwoing中

回答 1 投票 0

QT如何用智能指针来管理内存?我的应用应该崩溃

我希望这个问题能找到您的状况。我对此有些困惑。我真的不明白QT对象模型树如何用智能指针处理内存。 我创建了此QT5基本测试应用J ...

回答 1 投票 0


成员变量指向的数据构成constness- cons const成员函数允许在类引用的对象上调用const成员函数的C ++新移民(通过指针或参考)调用非const方法。例如,

class SomeClass { class SomeClassImpl; SomeClassImpl * impl_; // PImpl idiom public: void const_method() const; }; struct SomeClass::SomeClassImpl { void non_const_method() { /*modify data*/ } }; void SomeClass::const_method() const { impl_->non_const_method(); //ok because impl_ is const, not *impl_ };

回答 4 投票 0


理解C ++ std ::shared_ptr

我有一个问题,请浏览以下简单的C ++程序, int main() { shared_ptrSptr1(new int); shared_ptrSptr2= sptr1; shared_ptrSptr3;

回答 3 投票 0

如何用弧和弱创建一个环状引用? 我有两个结构: 结构A { 地图:hashmap

我有两个结构: struct A { map: HashMap<u32, Vec<B>>, } struct B { weak: Weak<A> }

回答 2 投票 0

`unique_ptr` 上的原子操作

std::shared_ptr 具有原子操作的专业化,例如atomic_compare_exchange_weak 和 family,但我找不到有关 std::unique_ptr 的等效专业化的文档。有没有...

回答 3 投票 0

使用智能指针的霍夫曼编码不起作用

我正在尝试使用智能指针实现霍夫曼编码算法,但它无法正常工作。我开始知道在“build_tree”的某个阶段,指针是 nullptr 我不知道为什么......

回答 1 投票 0

如何使用智能指针防止双重对象删除?

我有一个班级,它拥有它的孩子: 班级 儿童 { 民众: 孩子() {} 〜孩子(){} }; 父类:公共 QObject { Q_OBJECT 民众: 显式父级(QObject *pa...

回答 6 投票 0

Rust 中的通用特征参数

我有一个自定义智能指针,我正在尝试将其扩展到特征对象。本质上我想做的是: 使用 std::ptr::NonNull; 结构体 Ptr { 数据:NonN...

回答 1 投票 0

C++:通用使用shared_ptr<>相当于GC吗?

这只是一个学术问题(我永远不会在真正的代码中这样做): 如果我在代码中普遍使用shared_ptr<>,其行为是否等同于像Ja这样的gc收集语言...

回答 5 投票 0

std::move 在 lambda 内捕获 unique_ptr

我想将 std::unique_ptr 捕获到 lambda 中,然后将其移到 lambda 内的另一个函数中,但是我的两个最小示例无法编译,我不确定为什么。 有人能给我解释一下吗,w...

回答 1 投票 0

将 unique_ptr 和自定义删除器与 fftw3 库一起使用

使用 fftw3 快速傅里叶变换 (FFT) 库时,会声明并初始化一个计划变量,然后用它来执行一些 FFT,并在内存空闲时销毁...

回答 1 投票 0

如何将 std::function 放入像 std::unique_ptr 这样的智能指针中并使用它?

如何将 std::function 放入像 std::unique_ptr 这样的智能指针中并使用它?我已经尝试过了,但没有成功。 这是我已经尝试过的代码: const inline void PrintSection(TurboINI:...

回答 2 投票 0

auto_ptr 是否已弃用?

auto_ptr 在传入的 C++ 标准中会被弃用吗? 是否应该使用 unique_ptr 而不是 share_ptr 来进行所有权转移? 如果unique_ptr不在标准中,那么我是否需要使用shared_ptr

回答 4 投票 0

valgrind 和 std::unique_ptr --- 是否误报?

我正在尝试了解现代 C++ 中智能指针的使用,并且我编写了一个小而简单的程序来在 valgrind 中进行测试。问题在于下面的例子: #包括 #

回答 2 投票 0

使用智能指针来管理缓冲区

我最近开始将许多现有的类迁移到使用智能指针,我有一些关于如何移植一些我认为可以从使用智能指针中受益的代码的问题...

回答 2 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.