MST

星途 面试题库

面试题:C++中拷贝构造函数在函数参数传递时的调用分析

假设有如下C++代码: ```cpp class MyClass { public: MyClass() { std::cout << "Constructor called" << std::endl; } MyClass(const MyClass& other) { std::cout << "Copy Constructor called" << std::endl; } ~MyClass() { std::cout << "Destructor called" << std::endl; } }; void func(MyClass obj) { std::cout << "Inside func" << std::endl; } int main() { MyClass myObj; func(myObj); return 0; } ``` 请分析在这段代码执行过程中,拷贝构造函数在何处被调用,并解释原因。
27.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 拷贝构造函数调用位置
    • func(myObj)这一行代码处调用了拷贝构造函数。
  2. 原因
    • 函数func的参数是MyClass类型的对象obj,这是值传递。当调用func(myObj)时,会创建一个myObj的副本作为函数func的参数obj。在创建这个副本的过程中,会调用MyClass类的拷贝构造函数,因为要使用已存在的myObj对象来初始化新的obj对象。所以控制台会输出“Copy Constructor called”。

执行顺序如下:

  1. 首先在main函数中创建myObj对象,调用构造函数,输出“Constructor called”。
  2. 调用func(myObj),创建myObj的副本obj,调用拷贝构造函数,输出“Copy Constructor called”。
  3. 进入func函数,输出“Inside func”。
  4. func函数结束,obj对象析构,输出“Destructor called”。
  5. main函数结束,myObj对象析构,输出“Destructor called”。