移动语义是一种编程语言功能,当源对象是临时对象或其他过期对象时,允许复制操作被更有效的“移动”替换。
所以说我有一个树结构,其节点定义如下: 结构节点 { 字节密钥部分; unique_ptr 左、右、中; TValue值; }; unique_ptr根; 扫描仪...
为什么将 const ref 返回值移动到另一个函数中仍然会移动构造对象?
在以下示例中,函数 Table::get_subtable() 返回对内部子对象 (SubTable) 的 const 引用。然后该值被 std::moved 并传递到静态工厂函数中
理解Stroustrup的PPP中除了移动赋值运算符之外为什么还要调用移动构造函数?
我正在阅读 Stroustrup 的《编程:C++ 原理与实践》第 4 版,我对一些旨在说明复制构造函数/复制的代码的输出感到困惑
从具有按值捕获的 lambda 移动构造 std::function 时,移动构造函数被调用两次
当从 lambda 移动构造 std::function 对象时,该 lambda 具有按值捕获,似乎被值捕获的对象的移动构造函数被调用两次。缺点...
以下 Move 操作是否合法,因为没有 UB。 我想实现 16 字节 MyString 的一次交换,而不是两次交换。 类 MyString { std::size_t size_; 字符* str_...
考虑片段 结构体 Foo { 虚拟:[u8; 65536], } fn 酒吧(foo: Foo) { println!("{:p}", &foo) } fn 主() { 让 o = Foo { 虚拟:[42u8; 65536]}; println!("{:p}", &o)...
当捕获的对象在复制构造函数中抛出时警告“bugprone-exception-escape”
当我有一个按值捕获对象的 C++ lambda,并且该对象可以在其复制构造函数中抛出异常时,clang-tidy 将显示警告: 警告:fu 中可能会抛出异常...
我应该从`std::future`中`std::move`吗?
假设我有一个返回 std::vector 的函数,我想异步调用它。 std::vector foo(int n); int main() { 自动 future_vector = std::async(foo, 999); // ...
我现在正在使用代码库,此部分包含以下内容: if(const auto *temp_ptr = obj->get_ptr()) { perm_ptr = std::move(temp_ptr); } 这有什么意义...
我想练习线程,因此我创建了一个小解析器。我希望使线程版本尽可能快,因此我想避免使用移动语义进行复制。但我...
我有一个主线程需要定期将缓冲区刷新到磁盘,所以每次我创建一个新线程来运行 json.dump(buffer) 。但在此之后我需要立即清除缓冲区,所以...
使用 std::move() 从 null 时无效的类中提取 std::unique_ptr 成员:如何避免无形中使对象无效?
考虑以下场景: 结构体 foo {}; 班级酒吧 { 民众: 酒吧(std :: unique_ptr数据):数据{std :: move(数据)} {} foo* get_data() { return (this->data).get(); } } 优先...
最近我发现自己经常遇到这样的情况:只有一个函数接受某个对象作为参数。该函数必须复制该对象。 然而该函数的参数...
我正在与移动c'tors进行学习/刷新练习,我遇到了一些意想不到的事情。下面我有一个包含 std::string m_name; 的类 person。我正在使用这个...
假设我有一个主类 SomeManager 来跟踪另一个类 SomeClass 的实例。当 SomeClass 被构造时,它调用 SomeManager 的方法,传递一个指向自身的指针......
这种理解正确吗:如果一个对象本身存储了所有内容,那么复制它和移动它实际上是同一件事?
C++ 中“本身存储或不存储所有内容的对象”示例: 使用 EverythingInMyself1 = int[64]; 使用 EverythingInMyself2 = 结构 { 布尔标志; 整数头; uint8_t da...
在最少需要的代码片段中,在移动赋值中,为什么注释行 *arg = nullptr;非法且 arg.p = nullptr;好的?如果我理解正确的话,两者都在修改右值,但在
C++ 移动赋值参数在取消引用时会引发错误,但在直接访问成员时有效
在最少需要的C++代码片段中,在移动赋值中,为什么注释行 *arg = nullptr;非法且 arg.p = nullptr;好的?如果我理解正确的话,两者都在修改右值,是的...
在 C++ 中,当仅移动类型的右值按值传递给函数时,幕后会发生什么?
我试图更好地理解 C++ 中的值类别,但我遇到了一些让我有点困惑的代码。 我查看了一些问题,例如按值或 rva 接受仅移动参数...
我的程序中有大量大型对象。它们当前存储在带有客户比较函子的 std::set 中。该集合一开始是空的,我不断地将物体放入其中。我也