MST

星途 面试题库

面试题:C++函数模板类型参数生命周期管理之中等题

在C++函数模板中,如果类型参数是一个类类型,且函数模板内部创建了该类型参数的临时对象,当函数模板执行结束后,这个临时对象的生命周期是如何结束的?请举例说明。
13.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 临时对象生命周期结束方式
    • 当函数模板执行结束后,创建的类类型临时对象会自动调用其析构函数来结束生命周期。这是C++对象生命周期管理的基本规则,在栈上创建的对象(包括临时对象),当其作用域结束时,会自动销毁。
  2. 举例说明
#include <iostream>

template <typename T>
void func() {
    T temp; // 创建类类型T的临时对象
    // 函数逻辑,这里简单打印信息表示函数执行
    std::cout << "Function is running with a temporary object of type " << typeid(T).name() << std::endl;
}

class MyClass {
public:
    MyClass() {
        std::cout << "MyClass constructor called" << std::endl;
    }
    ~MyClass() {
        std::cout << "MyClass destructor called" << std::endl;
    }
};

int main() {
    func<MyClass>();
    return 0;
}

在上述代码中:

  • func函数模板创建了类型为T的临时对象temp
  • func<MyClass>调用时,MyClass的构造函数会被调用,输出MyClass constructor called
  • func<MyClass>函数执行结束,MyClass的析构函数会被调用,输出MyClass destructor called,表明临时对象生命周期结束。