smart-pointers相关内容

从方法返回引用

class A : boost::noncopyable{ }; class B{ A & conn() const; }; 我该如何声明和实现conn()呢: conn应创建并返回对A类型对象的引用。 我不能使用B在客户端代码中中断B的接口 我想防止代码泄漏内存,所以我不能简单地返回 对堆中对象的引用。 我没有找到任何不会破坏客户端代码的智能指针实现,因为没有转换为 ..
发布时间:2022-08-26 14:20:15 C/C++开发

是否存在具有单个强所有者和多个弱引用的共享指针?

我正在寻找类似于Arc/Rc的智能指针,只是它不允许共享所有权。 我希望拥有所需数量的rc::Weak引用,但我只需要一个强引用,即所有者。我想用类型系统来强制执行这一点。 Arc/Rc可以克隆,并且可以在多个位置拥有它们。 卷起我自己的智能指针将是一种选择,但我相信这样的数据结构应该已经存在,即使在标准库之外。 我正在寻找提供这种接口的数据结构: impl MySm ..
发布时间:2022-08-26 14:04:15 其他开发

聪明的指针--为什么要使用它们,应该使用哪种?

一般问题 现在我读了很多关于智能指针的文章,在很多情况下,共享指针似乎是“完美的”。然而,我也读到了周期性引用或类似的东西?哪里不能使用shared_ptr?我很难理解这一点,有谁能举一个简单的例子来说明这一点吗? 我真的想知道,弱_ptr提供了什么普通指针不能提供的?-因为它们不增加引用计数,所以它们不能保证它们所指向的内存仍然有效? 我的个人项目: 在一个项目中,我有两个“全局 ..
发布时间:2022-08-26 13:57:29 C/C++开发

智能指针数组删除器

到目前为止,我已经为一些数据处理分配了缓冲区,然后将其删除。由于代码变得更大,并且在某些情况下可能会发生异常,我考虑使用std::unique_ptr使其更安全,并提出了这些解决方案: unique_ptr p1( (char*)operator new(bufSize), operator delete); unique_ptr ..
发布时间:2022-08-26 13:46:08 C/C++开发

简单引用计数:智能指针

我想使用智能指针实现一个简单的引用计数。变量pointer表示指向存储对象的指针,reference_count表示对象副本的总数。 如果我们使用NULL初始化对象:Reference_count=-1否则Reference_Count=1 COPY CTOR AND OPERATOR=INCREMENT REFERENCE_COUNT 析构函数递减Reference_count,如果没 ..
发布时间:2022-08-26 13:31:59 C/C++开发

引用UNIQUE_PTR的向量

我有一个unique_ptr的集合。这里我想获取其中的一些并将它们返回给调用者。调用者只需要读取内容,所以我想使用常量引用。但我不确定如何使用unique_ptr%s执行此操作。 以下是我使用原始指针执行此操作的一些代码: class entry { }; vector master; const vector get_entries() { ..
发布时间:2022-08-26 13:27:20 C/C++开发

Std::Ware_PTR:LOCK或SHARED_PTR构造函数?

似乎有两种方法可以临时获取weak_ptr指向的资源的所有权: 使用lock() 将weak_ptr传递给shared_ptr构造函数 这两个函数都产生shared_ptr,在weak_ptr为空的情况下,锁返回nullptr,shared_ptr构造函数抛出异常。 因此,问题是:应该在什么时候使用其中之一?是否有与此相关的一般指导原则或最佳实践? 推荐答案 复制自ht ..
发布时间:2022-08-26 13:21:02 C/C++开发

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

我有一个函数,用于分配给定大小的缓冲区。缓冲区将在返回之前对一些数据进行预处理/填充。此预处理可能返回FALSE,以表示此缓冲区未正确处理。因此,我要对此缓冲区应用RAII,以避免在没有delete[]它的情况下提前返回。 通常我使用unique_ptr来帮助我自动释放本地分配的对象。在这种情况下,我需要返回这个分配的对象(归unique_ptr所有),并将所有权转移给调用者。但编译器抱怨说 ..
发布时间:2022-08-26 13:13:06 C/C++开发

聪明的点子。何时、何地、以何种方式?

首先,由于存在不同类型的智能指针,我想将这个问题集中在其中的两个上:引用计数的侵入式和非侵入式智能指针。针对每种指针类型分别询问该问题。 我真的不确定如何表达我的问题,所以我不是在问: 我不是在问为什么或什么时候需要聪明的指针。我也不应该使用哪种类型的智能指针以及使用这些指针的目的。 以下是我要问的问题,我希望它足够清楚:当处理“智能管理”对象时,我应该在哪些上下文中使用哪些指针语义?即智 ..
发布时间:2022-08-26 12:59:10 C/C++开发

自动指针的优缺点

与普通指针相比,使用自动指针(AUTO_PTR)有哪些优点和缺点?我听说它可以自动释放内存,但为什么不经常使用呢? 推荐答案 std::auto_ptr的主要缺点是它具有过户语义。这使得std::auto_ptr无法存储在STL容器中,因为这些容器在您存储或获取元素时使用复制构造函数。 此外,我注意到std::auto_ptr的另一个重要方面是它们不能用于PIMPL习语的使用。这是因 ..
发布时间:2022-08-26 12:51:05 C/C++开发

将取消引用的智能指针的地址传递给需要原始指针的函数

(假设我正在使用的库或框架需要使用原始指针) 使用拥有某些数据的智能指针,然后将取消引用的智能指针的地址传递给需要原始指针的函数是否有效? 推荐答案 是的,这是有效的做法。std智能指针具有专门用于get()成员函数。 通常,当您通过智能指针管理对象时,当这些函数暗示所有权语义时,您应该只将整个智能指针对象按原样传递给其他函数:如果函数将复制std::shared_ptr,则它 ..
发布时间:2022-08-26 12:42:13 C/C++开发

使用带有UNIQUE_PTR的自定义删除程序

通过SHARED_PTR,您可以使用自定义删除器,如: auto fp = shared_ptr( fopen("file.txt", "rt"), &fclose ); fprintf( fp.get(), "hello " ); 并且无论函数如何退出,它都会记住fclose文件。 但是,重新计算局部变量似乎有点过分,所以我想使用unique_ptr: auto f ..
发布时间:2022-08-26 12:31:33 C/C++开发

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

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