问题标签 [rvalue-reference]

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 回答
346 浏览

c++11 - 对于移动赋值,如果将销毁留给右值,是否会发生内存泄漏?

参考这篇 MSDN 文章,最后(部分:鲁棒编程)指出,

为防止资源泄漏,请始终在移动赋值运算符中释放资源(例如内存、文件句柄和套接字)。

如果将移动分配改为实现为:

当“其他”引用超出范围时,不会释放右值的“_data”吗?

0 投票
2 回答
3207 浏览

c++ - C++11 - 区分右值指针

如何将变量区分为编译器构造的字符串?

例如,虽然右值"Hello, World"的类型是const char*. const char*本身并不意味着不能更改指针。char* const指针无法更改,但这不是编译器构造的。

这是否意味着,对于任何包含 aconst char*的容器,数据应该通过 C++ 的移动语义以外的方式复制?有什么方法可以移动编译器构造的字符串而不管所有其他字符串吗?

例如,在 GCC 4.5.2 中,返回类型int而不是返回的方法int&被视为返回int&&。我不知道实际的标准是否应该是这样的,但这就是 GCC 暂时所做的。

编辑:为了澄清,我的意思是应该复制指针指向的实际内存。这意味着必须分配新的内存并且指针中的数据应该被复制到新的位置。

0 投票
1 回答
1898 浏览

c++ - 什么是 multimap::emplace() 和 move()?

我正在查看有关 multimap 的 MSDN 文档,发现它有一个成员函数 multimap::emplace()。下面是该成员函数的示例。

似乎是 C++0x emplace()move()有人可以为我解释一下吗?我读过关于move(),但我真的不明白它做了什么(在引擎盖下)。

0 投票
4 回答
271171 浏览

c++ - C++11 中的 T&&(双 & 符号)是什么意思?

我一直在研究 C++11 的一些新特性,其中一个我注意到的是声明变量时的双 & 符号,比如T&& var.

首先,这个野兽叫什么?我希望谷歌允许我们搜索这样的标点符号。

它到底是什么意思?

乍一看,它似乎是一个双重引用(如 C 风格的双指针T** var),但我很难想到一个用例。

0 投票
1 回答
668 浏览

c++11 - 为什么在 C++0x 右值引用的前向定义中使用标识?

A Brief Introduction to Rvalue References中,forward定义如下:

课程的目的是什么identity?为什么不:

0 投票
2 回答
2375 浏览

c++ - 移动语义 std::move 如何使用它

为什么这段代码不能编译?

错误 C2440:“返回”:无法在“int &&”中转换“int”

0 投票
2 回答
3840 浏览

c++ - 右值引用参数和模板函数

如果我定义一个接受右值引用参数的函数:

我可以使用 GCC 4.5 调用它,使用a,ararr:

但是,调用类似的非模板函数,

使用这三个参数中的任何一个都将失败。我正准备加强我的知识forward,但这让我偏离了方向。也许是 GCC 4.5;我惊讶地发现A Brief Introduction to Rvalue References中的第一个示例也给出了编译错误:

0 投票
2 回答
11445 浏览

c++ - 对类中的方法正确使用 `= delete`

对于取消定义类的所有其他生成的方法和构造函数,以下片段是否正确?

这会删除每个默认编译器实现,只留下析构函数,对吗?如果没有它,我猜这个类将(几乎)无法使用,但我也可以删除它,对吗?

Picture&move-assign的返回类型operator=(Picture&&)是否正确?如果我Picture&&为返回类型写会有所不同吗?

0 投票
2 回答
3196 浏览

c++ - 将不可复制的对象放入标准容器

此类是否设计了标准 C++0x 方法来防止复制分配,以保护客户端代码免受意外双重删除data

你注意到了,我在这里定义了新的movemove-assign方法。我是否正确实施了它们?

有什么方法可以 - 使用movemove-assign定义 - 放入DataHolder标准容器中?像一个vector?我该怎么做?

我想知道,我想到了一些选择:

这个emplace_back想法只是一个猜测,在这里。

编辑:为了方便读者,我将答案放入示例代码中。

0 投票
5 回答
15716 浏览

c++ - 在任何情况下,返回 RValue 引用 (&&) 是有用的吗?

函数应该返回 RValue 引用是否有原因?一种技术、技巧、习语或模式?

我知道一般返回引用的危险,但有时我们还是会这样做,不是吗?T& T::operator=(T)只是一个惯用的例子。但是怎么样T&& func(...)?是否有任何一般的地方可以让我们从中受益?与仅编写客户端代码相比,编写库或 API 代码时可能有所不同?