gpt4 book ai didi

c++ - 复制构造函数和 move 构造函数如何工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:29 25 4
gpt4 key购买 nike

我的问题是了解这两个构造函数究竟是如何工作的。我有这个类:

class moveClass
{
int variabile;
public:
moveClass(){}
//move constructor
moveClass(moveClass && arg)
{
cout<<"Call move constructor"<<endl;
variabile = arg.variabile;
}
//copy constructor
moveClass(const moveClass & arg)
{
cout<<"Call copy constructor"<<endl;
variabile = arg.variabile;
}
};

据我了解,当我实例化此类的新对象时,会根据参数的类型调用构造函数。

move 构造函数的优点是,当使用右值实例化对象时,不会复制该对象,而只是 move 它。

1 moveClass a;
2 moveClass b = a;
3 moveClass c = std::move(a);

考虑到这个例子,我可以说当我实例 b 时,a 被复制,然后分配给 b 吗?

换句话说,直到第 2 行,我的内存中将有 3 个对象:a、b 和 a_copy。

虽然第 3 行将只创建 c 对象而没有新的拷贝对象。

基本上在这三行的末尾,我将在内存中拥有 4 个对象。这是正确的吗?

构造函数的代码也是相同的,所以我希望唯一的区别是传递的参数类型。

最佳答案

In other words up until line 2 i will have 3 objects in memory: a, b and a_copy.

没有。

moveClass b = a;

相同
moveClass b(a);

因此,b 的复制构造函数被调用,您直接将成员从a 复制到b,没有临时(复制)生成。

最后,您只构建了 3 个对象,abc

关于c++ - 复制构造函数和 move 构造函数如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49818491/

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