面试题答案
一键面试- 临时对象产生时机:
- 当函数调用,实参传递给形参(按值传递自定义类型对象)时产生。实参的值会被用来初始化这个临时对象,这个临时对象作为函数形参的副本。
- 临时对象销毁时机:
- 当函数执行结束,离开其作用域时,这个临时对象(也就是形参)会被销毁。
- 示例代码:
#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "MyClass constructor" << std::endl;
}
~MyClass() {
std::cout << "MyClass destructor" << std::endl;
}
};
void func(MyClass obj) {
std::cout << "Inside func" << std::endl;
}
int main() {
MyClass myObj;
std::cout << "Before calling func" << std::endl;
func(myObj);
std::cout << "After calling func" << std::endl;
return 0;
}
在上述代码中:
- 当
func(myObj)
调用时,会产生一个MyClass
类型的临时对象,它是myObj
的副本,用于初始化func
函数的形参obj
。此时输出MyClass constructor
(来自临时对象的构造)。 - 当
func
函数执行结束,离开其作用域时,临时对象(形参obj
)被销毁,输出MyClass destructor
。 - 最后,
main
函数结束时,myObj
被销毁,再次输出MyClass destructor
。