C++ ——— 匿名对象
目录
匿名对象的语法
测试匿名对象的声明周期
匿名对象的使用场景
匿名对象的语法
代码演示:
class A
{
public:
// 构造
A(int i)
:_a(i)
{}
private:
int _a;
};
int main()
{
// 有名对象
A a1(1);
// 匿名对象
A(5);
return 0;
}
有名对象的特点:
有名对象的声明周期在 main 函数的这个局部域中
匿名对象的特点:
匿名对象的声明周期就在定义的这一行
测试匿名对象的声明周期
代码演示:
class A
{
public:
// 构造
A(int i)
:_a(i)
{
cout << "A(int i)" << endl;
}
// 析构
~A()
{
cout << "~A()" << endl;
}
private:
int _a;
};
int main()
{
A a1(1);
cout << "匿名对象声明周期开始" << endl;
A(5);
cout << "匿名对象声明周期结束" << endl;
return 0;
}
在构造函数和析构函数中都显示打印出来了,方便查看各个实例对象的生命周期
代码验证:
第一个构造函数是 a1 调用的,而匿名对象的构造函数和析构函数是连续调用的,这就证明了匿名对象的生命周期只在那一行,最后程序结束时调用了 a1 的析构函数
匿名对象的使用场景
代码演示:
class Solution
{
public:
int Sum_Solution(int n)
{
int sum = 1;
for (int i = 1; i <= n; i++)
{
sum = sum * i;
}
return sum;
}
private:
};
这个类实现的功能是阶乘,那么只是想得到某个数的阶乘是多少,就能使用匿名对象来实现
代码演示:
// 正常实例化对象后再调用函数
Solution sl;
cout << sl.Sum_Solution(5) << endl;
// 直接使用匿名对象调用函数
cout << Solution().Sum_Solution(5) << endl;
代码验证: