问题描述
custom-button
#include <iostream>
#include <algorithm>
using namespace std;
class A {
public:
int *p;
A () : p(new int(1)) {
cerr << "construct " << p << endl;
}
A (A &a) noexcept: p(new int(*a.p)) {
cerr << "copy " << p << endl;
}
A (A &&a) noexcept: p(a.p) {
a.p = nullptr;
cerr << "move " << p << endl;
}
~A () {
cerr << "destruct " << p << endl;
delete p;
}
};
A get1 () {
A a;
return std::move(a);
}
A &&get2 () {
A a;
return std::move(a);
}
int main () {
A obj = get2();
cerr << "obj:" << endl;
cerr << obj.p << endl;
cerr << *obj.p << endl;
}
Howeevr,当调用get2时,一次破坏在移动之前发生,并导致双重释放。
construct 0x7fe9ad405a00
move 0x7fe9ad405a00
destruct 0x0
obj:
0x7fe9ad405a00
1
destruct 0x7fe9ad405a00
看来,返回类型的差异会导致不同的转换顺序, 我只是不太确定这里的情况如何。 请问有人可以帮助我吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)