我在更改c ++ 17到11之后编辑了这个问题
#include <cstdio>
#include <iostream>
#include <initializer_list>
using namespace std;
class A
{
public:
static int s;
int t = s;
A(){
cout << "constructed" << t<< endl;
s++;
}
A (A&& a) {
cout << "in move ctor, moving"<< a.t << " creating" << s << endl;
s++;
}
~A() {
cout << "deleting"<< t << endl;
}
};
A f1 (A a)
{
std::cout << "f1: " << endl;
return a;
}
int A::s = 0;
int main() {
f1(A()) ;
std::cout << "is still alive!" << endl;
}
汇编为g++ -std=c++11 -fno-elide-constructors -Wall -pedantic -pthread main.cpp && ./a.out
输出是:
constructed0
in move ctor, moving0 creating1
f1:
in move ctor, moving1 creating2
deleting2
deleting1
deleting0
is still alive!
我无法理解为什么。
如果f1按值接收A,并且正在给出A&amp;&amp; object(来自f2),
它在f1函数里面创建一个临时对象“a”对吗?
如果是这样,当退出临时对象(此处为“1”)时应该已经被销毁,没有?从我从示例中可以看出,临时对象在行尾被销毁,所有其他临时对象,而不是f1内部的功能
所以问题是:
为函数创建的对象是否在函数内部(最后)被销毁?或者它在创建它的行的末尾被销毁。
非常感谢