第二十三课 临时对象
文章目录
一、示例
class test{
private:
int i;
public:
test(int j)
{
i = j;
}
test()
{
test(0); // 这里产生了临时对象
}
void printfi(void)
{
printf("%d", i);
};
}
int main(char* argc, char** argv)
{
test t;
t.printfi();
return 0;
}
以上函数输出的值不为0,这是为什么呢?
构造函数是一个特殊函数,直接调用构造函数会产生一个临时对象,临时对象的声明周期只有一条语句的时间,临时对象的作用域旨在一条语句中。临时对象是C++中值得注意的灰色地带
上述现象产生的原因是因为引入了临时对象。
- 现代 C++ 编译器在不影响最终执行结果前提下,会尽力减少临时对象的产生
二、小结
-
直接俄调用构造函数将产生一个临时对象
-
临时对象是性能的瓶颈,也是bug的来源之一
-
现代C++编译器会尽力避开临时对象
避开的前提是不影响执行结果
-
实际工程开发过程中需要认为的避开临时对象