MST

星途 面试题库

面试题:C++函数按值传递中临时对象的产生与销毁

在C++中,当一个函数按值传递一个自定义类型对象时,会产生临时对象。请描述这个临时对象是在何时产生,何时销毁的?并举例说明。
32.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 临时对象产生时机
    • 当函数调用,实参传递给形参(按值传递自定义类型对象)时产生。实参的值会被用来初始化这个临时对象,这个临时对象作为函数形参的副本。
  2. 临时对象销毁时机
    • 当函数执行结束,离开其作用域时,这个临时对象(也就是形参)会被销毁。
  3. 示例代码
#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