我花了一些时间来找到错误,但仍不知道如何解决它。
从代码上看,只有一个构造函数调用,但它却调用了两次析构函数。
代码:
struct A
{
A()
{
std::cout << "C'tor" << std::endl;
}
A(A&&)
{
std::cout << "M'tor" << std::endl;
}
A(const A&) = delete;
A& operator=(const A&) = delete;
A& operator=(A&&) = delete;
~A()
{
std::cout << "D'tor" << std::endl;
}
};
int main()
{
auto lambda = [](int i){
A a;
if (i == 0)
return std::move(a);
};
lambda(1);
return 0;
}
输出:
C'tor
D'tor
D'tor
这怎么会发生呢?编译器至少应该为我生成一个警告吧?你觉得呢?