问题标签 [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 投票
5 回答
400 浏览

c++ - C ++:带有未知删除器的unique_ptr

我需要编写一个函数来检索和处理一些数据。可以通过多种方式分配此数据(在数据段上、在堆上、在共享内存段上等等):

由于data可能是动态分配的,我认为处理它的最佳方法是使用一种unique_ptr或其他类型的智能指针。但是它并不总是动态分配的:我需要在运行时为 选择删除器unique_ptr,但这是不可能的。

我应该如何定义和处理data

0 投票
2 回答
4527 浏览

c++ - C++11 将传统指针转换为智能指针。使用来自 llvm 的最新 SVN Clang 和 libc++

我在类 (A) 中有一个函数,它本质上将指向另一个类 (B) 的指针作为参数。B 类由它也应该接受的多个其他类继承。

我想要做的是获得这个指针的所有权,以便以后在课堂上使用,它不会再在课堂外用于其他任何事情。虽然我会将参数设为 shared_ptr,但我想尽可能避免这种情况,因为与我一起工作的其他人并没有完全了解整个智能指针的内容。有没有办法做到这一点?

这是我想做的一个例子,尽管从我测试的结果来看,这不起作用。

其次,我想可能使用复制构造函数或类似的东西来在类中使用智能指针:如果我必须手动删除,我必须这样做可能会有点难看。问题是我不知道是基类(B)进来还是从B继承的类。我不太确定如何处理这个问题而不必在某些地方进行硬编码类的可检查 ID 并使用正确的复制/移动构造函数,我想不惜一切代价避免。

我正在使用来自 llvm 的更新的 Clang 和 libC++,我在 2012 年 3 月 12 日英国时间上午 10 点左右进行了更新。

0 投票
5 回答
34321 浏览

c++ - 将 unique_ptr 传递给函数

我正在尝试“现代化”一些现有代码。

  • 我有一个类,它当前有一个成员变量“Device* device_”。
  • 它使用 new 在一些初始化代码中创建实例,并在析构中有一个“delete device_”。
  • 此类的成员函数调用许多其他以 Device* 作为参数的函数。

这很好用,但是为了“现代化”我的代码,我认为我应该更改要定义为的变量"std::unique_ptr<Device> device_"并删除对删除的显式调用,这使得代码更安全并且通常更好。

我的问题是这个——

  • 然后我应该如何将device _ 变量传递给所有需要它作为参数的函数?

我可以调用 .get 来获取每个函数调用中的原始指针。但这看起来很丑陋,并且首先浪费了一些使用 unique_ptr 的理由。

或者我可以更改每个函数,以便现在采用“std::unique_ptr&”类型的参数,而不是采用“Device*”类型的参数。这(对我来说)有点混淆了函数原型,使它们难以阅读。

对此的最佳做法是什么?我错过了其他选择吗?

0 投票
2 回答
28990 浏览

c++ - unique_ptr 编译错误

如果我告诉你我无法编译它,我想这会很尴尬。你能帮我吗:

0 投票
2 回答
3704 浏览

c++ - eclipse中的unique_ptr自动完成

我正在玩 unique_ptr。在我一篇文章中,人们通过在编译期间指定 -std=c++0x 帮助我编译了一个使用该指针的程序。现在我想知道是否有任何方法可以指示 eclipse 在自动完成时考虑 c++11?
unique_ptr 不在 std:: 命名空间列表中,我也找不到与 unique_ptr 关联的方法(重置、移动...)。

谢谢你

0 投票
8 回答
21855 浏览

c++ - 使用 std::unique_ptr 的双(二维)数组

我有一个由指针分配的双数组。

我正在尝试使用unique_ptr

但不断收到错误消息no operator = matches these operands。我在这里做错了什么?

0 投票
3 回答
19155 浏览

c++ - 为什么我可以复制 unique_ptr?

可能重复:
从函数返回 unique_ptr

20.7.1.2 [unique.ptr.single] 像这样定义复制构造函数:

那么,为什么下面的代码编译得很好?

我这样编译它:

编译器:g++ 版本 4.6.1 20110908 (Red Hat 4.6.1-9)

0 投票
4 回答
4022 浏览

c++ - std::unique_ptr 带有用于 win32 LocalFree 的自定义删除器

CommandLineToArgvW我有返回 aLPWSTR*并警告我的 win32 API

CommandLineToArgvW为指向参数字符串的指针和参数字符串本身分配一块连续的内存;当不再需要时,调用应用程序必须释放参数列表使用的内存。要释放内存,请使用对该LocalFree函数的一次调用。

请参阅 http://msdn.microsoft.com/en-us/library/windows/desktop/bb776391(v=vs.85).aspx

在上述情况下,释放内存的 C++ 惯用方法是什么?

我正在考虑std::unique_ptr使用自定义删除器,例如:

上面的代码有问题吗?

0 投票
7 回答
67370 浏览

c++ - 类型不完整的 std::unique_ptr 不会编译

我正在使用 pimpl-idiom std::unique_ptr

但是,我在第 304 行中收到关于使用不完整类型的编译错误<memory>

sizeof' ' 对不完整类型 ' uixx::window::window_impl'的无效应用

据我所知,std::unique_ptr应该可以与不完整的类型一起使用。这是 libc++ 中的错误还是我在这里做错了什么?

0 投票
1 回答
6100 浏览

c++ - 通常 std::bind 是否适用于仅移动类型,特别是 std::unique_ptr ?

我正在尝试使用 boost::asio 并遇到了一些泥潭。

我正在尝试编译以下代码:

如果我排除 std::move(buffer),一切正常,当然,这既来自 handle_read_done 的签名,也作为 std::bind 中的传递参数。

当试图将它传递给 boost::asio::async_read_some 时,它​​抱怨从 std::bind 返回的对象上隐式删除的函数,元组上的已删除函数,我认为这是因为可移动性以及很多提升具体错误。如果我只是尝试将它分配到一个应该与 boost 调用的签名匹配的 std::function 中,我会得到相同的元组错误,所以我猜它们是相同的。只是将 std::bind 的结果分配给 auto 不会产生编译器错误,但我当然不能在上面调用任何东西。

我究竟做错了什么?以下是尝试分配给时的输出std::function<void(const boost::system::error_code&,size_t)>

更新:

我知道以上似乎不起作用。但是,下面的工作不应该吗?

的签名在handle_read_done哪里

感觉就像我错过了一些非常明显的东西。

错误信息: