gpt4 book ai didi

c++ - 在构造函数中初始化成员时,是否应该在成员上使用 std::move?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:48 26 4
gpt4 key购买 nike

我一直在努力完全理解移动语义,但我有一个问题,因为不同的示例显示不同的东西。假设我们有一个 Foo 类,它有一个字符串成员 str_。要定义移动构造函数,我应该这样定义它吗:

Foo(Foo&& foo) : str_(foo.str_) { }

或者这个:

Foo(Foo&& foo) : str_(std::move(foo.str_)) { }

此外,我是否需要将要移动的对象的成员设置为空值?如果不构造另一个字符串,我将如何做到这一点,从根本上抵消了首先使用移动构造函数节省的费用?

最佳答案

你应该使用第二种方法。

您不必对您移动的string 做任何事情,因为这是由string 的移动构造函数处理的。后者由 move() 调用调用。

你自己的类也是如此,任何你想要move()的东西都应该有一个移动构造函数。例如,如果您的类有一个指针成员,您的移动构造函数可以/应该将 nullptr 分配给您 move() 来自的对象中的该成员。

关于c++ - 在构造函数中初始化成员时,是否应该在成员上使用 std::move?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50786746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com