gpt4 book ai didi

c++ - 永远不会调用移动构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:02 25 4
gpt4 key购买 nike

<分区>

我写了下面这段代码:

#define LOG cout << __PRETTY_FUNCTION__ << endl;

class MyClass
{
private:
int* ptr;

public:
MyClass()
: ptr(new int(10))
{
LOG
}

~MyClass()
{
LOG

if (ptr)
{
delete ptr;
ptr = nullptr;
}
}

MyClass(const MyClass& a)
: ptr(nullptr)
{
LOG
ptr = new int;
*ptr = *(a.ptr);
}

MyClass& operator=(const MyClass& a)
{
LOG
if (this == &a)
{
return *this;
}

delete ptr;
ptr = new int;
*ptr = *(a.ptr);

return *this;
}

MyClass(MyClass&& a)
: ptr(nullptr)
{
LOG

ptr = a.ptr;
a.ptr = nullptr;
}

MyClass& operator=(MyClass&& a)
{
LOG

if (this == &a)
{
return *this;
}

delete ptr;
ptr = a.ptr;
a.ptr = nullptr;

return *this;
}

void printClass()
{
LOG;
}
};

MyClass function()
{
MyClass m;
return m;
}

int main()
{
MyClass m = function();
return 0;
}

程序输出:

MyClass::MyClass()
MyClass::~MyClass()

这不会调用移动构造函数。有什么问题吗?

我期待以下输出:

MyClass::MyClass()
MyClass::MyClass(MyClass&&)
MyClass::~MyClass()
MyClass::MyClass(MyClass&&)
MyClass::~MyClass()
MyClass::~MyClass()

编译器可能看起来正在做一些优化。如果是这种情况,那么为什么我们需要为我们的案例移动构造函数或移动赋值运算符。

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