问题标签 [unique-ptr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2311 浏览

c++ - 使用 unique_ptr 离开作用域时堆损坏

我面临类似于从函数堆损坏返回的 void 指针的问题

相似之处在于,我在离开使用 unique_ptr 的范围时收到“堆损坏”消息。

这里的代码:

知道为什么会这样吗?

0 投票
2 回答
1087 浏览

c++ - 在向量上使用调整大小时,向量内部结构中的 unique_ptr 无法编译

VS2010

我有一个unique_ptr内部结构。然后我有一个vector这样的结构。如果我尝试调整向量的大小(或使用保留),我会收到编译错误。下面是一个仍然存在问题的精简示例。

unique_ptr我得到的错误是关于访问(赋值运算符)的私有成员的抱怨。编译器正在尝试动态构造Test &Test::operator =(const Test &)Test::Test(const Test &)。我不明白为什么调整大小操作需要调用这些函数中的任何一个(如果需要,它为什么不直接调用默认构造函数?)。它们都存在问题,因为unique_ptr由于const.

0 投票
2 回答
10093 浏览

c++ - C++ 数组和 make_unique

作为这篇文章的后续,我想知道它的实现如何make_unique分配函数临时缓冲区数组,例如以下代码。

这可以用一些调用来代替,make_unique然后会使用 delete 的[]-version 吗?

0 投票
2 回答
1901 浏览

c++ - unique_ptr 没有成员函数

我正在将我的 gcc 4.4 更新到 gcc 4.7,我将这样做以使用 4.7。

我的问题是当我使用unique_ptr. 我写了这段代码

但我想使用yt成员uique_ptr::get(),我得到的唯一功能是operator*,那有什么问题?

编辑:

这是我的问题: http://image-load.biz/?di= 6FBY

0 投票
4 回答
1194 浏览

c++ - 是否可以调整 unique_ptr 以在纯 c 中使用?

是否可以将 unique_ptr 用于普通 c?

也许在调用 malloc/free 时有一种方法可以模拟对自制“构造函数/析构函数”的调用?

可行吗?或者这只是一个愚蠢的想法?

0 投票
2 回答
33596 浏览

c++ - unique_ptr用于数组专业化的 lambda 自定义删除器

我最近开始将大量现有的 C++ 应用程序代码移植到 C++11,现在我正在转换为新的智能指针std::unique_ptrstd::shared_ptr,我有一个关于自定义删除器的具体问题。我想添加一个 lambda 记录器来查看我的删除被调用的位置,但我无法获得要编译的数组专业化版本。建议将不胜感激。

我一直在徒劳地寻找用于VC++10GCC 4.5.2+的数组专业化unique_ptr的自定义删除器的示例。我想在 lambda 中调用删除器时打印一条日志消息 - 主要是为了确保我认为超出范围的所有指针都在这样做。这对于专业化的数组版本是否可行?我可以让它与非数组版本一起工作,如果我将外部结构“MyArrayDeleter”作为第二个参数传递,我也可以让它与数组专业化一起工作。还有一件事,是否可以删除丑陋的std::function,因为我认为我可以让 lambda 签名解决这个问题。

0 投票
1 回答
6743 浏览

c++-cli - 在标头中声明 unique_Ptr 变量,然后在构造函数中分配它的语法是什么?

我编写了以下代码,对 c++ 很陌生,感觉很笨拙。我试图给'spriteBatch'(一个unique_Ptr)类范围。这是头文件:

然后在 cpp 文件构造函数中,这个:

我必须创建'sb'并将其移动到'spriteBatch'的方式似乎很笨拙。尝试直接分配给“spriteBatch”失败(也许我根本不知道正确的语法)。有没有办法避免需要使用 'sb' & std::move?

谢谢你。

0 投票
1 回答
3253 浏览

c++ - 使用智能指针管理缓冲区

我最近开始将许多现有的类迁移到使用智能指针,我有一些关于如何移植一些我认为可以从使用智能指针中受益的代码的问题(但我当然可能错了)。我通过其头文件有一个UtlMemBuffer缓冲区管理器类,如下所示。

本质上,这个类拥有一个由 void*/length 对组成的缓冲区向量。缓冲区管理是通过辅助方法实现的(UtlMemBuffer::append - 其实现也如下所示)。

我想让这个类使用新的C++11智能指针,以便可以很好地定义所有权并最小化重新分配。要使用此类,客户端代码通常将其自己的原始指针缓冲区/长度传递给构造函数,或者它可以调用 append。最终,当UtlMemBuffer的析构函数被调用时,它会释放自己的副本,确保在调用者负责其副本时没有内存泄漏。我认为,与其传入原始指针,不如使用std::shared_ptr将消除对这种类型的双缓冲区所有权的需要(即调用者将负责更新std::shared_ptr并将其传递给UtlMembuffer

我看到的最大挑战是支持读取方法(接口类似于文件的工作方式),我需要通过原始指针传回扁平内存。也许更好的设计方法是让我传回一个 std::unique_ptr,它是通过展平 shared_ptrs 的内部集合创建的。我不太确定最好的方法是什么,尽管我必须更改相当多的当前代码,这些代码使用该类来采用这种方法。

调用者是否都应该传入std::shared_ptr指针。我想知道进行这种转换的最佳方法是什么。

我对这个智能指针业务很陌生,所以任何建议都将不胜感激。谢谢

这是管理对缓冲区块向量的访问的辅助方法。如您所见,它重新分配原始指针并将它们存储在mBufferBlocks成员中。

0 投票
3 回答
2866 浏览

c++ - std::unique_ptr不完整的类型错误

我有

我在 VS10 的标记行上收到编译错误。在这种情况下,我是否应该被允许使用不完整的类型(实例化模板 - 构造函数 - 这里以 int 为例)?有解决方法吗?

编辑

0 投票
3 回答
1682 浏览

c++ - Fluent 接口模式和 std::unique_ptr

我正在玩流畅的界面模式。

首先,我写了这样的东西:

然后我尝试使用 std::unique_ptr,但后来我意识到我不知道如何沿链“移动”指针(this)。我试过类似的东西:

那当然行不通。

我怎样才能做到这一点?做这样的事情有什么问题吗?

为了回复诸如“不要使用指针”之类的评论:(还)没有任何实际原因,因为我正在使用指针进行此操作,只是我想知道是否可以这样做。