匿名对象:
1、Person(p).age ; 这里会调用拷贝构造函数利用p初始化这个匿名对象。
2、因此匿名对象实实在在的在栈空间中开辟了空间,我们这里并没有以Person(p);这样的方式使用它 ;这里我们只是访问这段空间中的内容 age
3、由于匿名对象随用随亡,所以我们想用长期使用它,就需要我们普通定义对象的方式了。如:Person p1(p); 隐式法:Person p1 = p;
4、当前行的代码执行完后,系统会自动回收匿名对象。
代码:
#include <vector>
void test02()
{
vector<int> v;
for (int i = 0; i < 100000; i++) {
v.push_back(i);
}
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
v.resize(3);
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
//收缩内存
vector<int>(v).swap(v); //匿名对象
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
}
int main() {
test01();
test02();
system("pause");
return 0;
}
输出:
v的容量为:138255
v的大小为:100000
v的容量为:138255
v的大小为:3
v的容量为:3
v的大小为:3
本质:
vector<> 容器 中的swap() 函数,本质上类似于指针的互换。
当前行的代码执行完后,系统会自动回收匿名对象。
图中假设x为匿名对象: