gpt4 book ai didi

c++ - 使用 LValue 引用移动语义

转载 作者:太空狗 更新时间:2023-10-29 20:29:15 26 4
gpt4 key购买 nike

所以 Move 语义很棒,给了我们更高的性能。

我读到这是一个全新的特性,如果没有 C++11,这是“不可能”做到的。

但是我们可以在 C++11 之前做到这一点吗?就像下面这样。

class AAA
{
private:
int* m_data;
public:
AAA(int _data) : m_data(new int(_data)) { }
AAA(AAA& _other) // Not using RValue reference.
{
m_data = _other.m_data;
_other.m_data = nullptr;
}

~AAA() { delete m_data; }
};

int main()
{
AAA sth1(100);
AAA sth2(sth1)
return 0;
}

我认为 RValue 引用的存在是为了不要创建参数略有不同的相同函数(如 Const 和 Non-Const)。

简单地说,使用 RValue 引用这只是另一种“类型”,我们可以同时执行 Copy 构造函数和 Move 构造函数。就是这样。

想知道我是否正确或遗漏了一些重要的东西。

提前致谢。

最佳答案

std::auto_ptr 完全按照您的建议做了。问题在于它使行为变得困惑并且无法复制。右值引用允许创建可以移动和复制的类。

右值引用允许基于上下文自动移动/复制(例如临时移动),尝试使用左值样式复制构造函数(实际执行移动)来模拟它可能是灾难性的。

关于c++ - 使用 LValue 引用移动语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536290/

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