AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 世界职业院校技能大赛汽车工程系选拔理论考试题库 题目详情
CAF88E2CAFE00001135B77F0847512A7
世界职业院校技能大赛汽车工程系选拔理论考试题库
1,000
单选题

在C++中,何时会调用析构函数?

A
对象被创建时
B
对象的作用域结束时
C
手动调用时
D
以上都不是

答案解析

正确答案:B

解析:

好的,让我们来详细解析这道题目。 ### 题目 在C++中,何时会调用析构函数? A. 对象被创建时 B. 对象的作用域结束时 C. 手动调用时 D. 以上都不是 ### 答案 正确答案是:**B. 对象的作用域结束时** ### 解析 #### A. 对象被创建时 - **错误**:析构函数不会在对象被创建时调用。相反,构造函数会在对象被创建时调用。构造函数负责初始化对象,而析构函数负责清理对象。 - **示例**: ```cpp class MyClass { public: MyClass() { std::cout << "Constructor called" << std::endl; } ~MyClass() { std::cout << "Destructor called" << std::endl; } }; int main() { MyClass obj; // 构造函数被调用 return 0; } ``` 输出: ``` Constructor called Destructor called ``` #### B. 对象的作用域结束时 - **正确**:当对象的作用域结束时,析构函数会被自动调用。作用域可以是一个函数、一个代码块(如if语句或for循环)或者整个程序。 - **示例**: ```cpp class MyClass { public: MyClass() { std::cout << "Constructor called" << std::endl; } ~MyClass() { std::cout << "Destructor called" << std::endl; } }; void someFunction() { { MyClass obj; // 构造函数被调用 } // 作用域结束,析构函数被调用 } int main() { someFunction(); return 0; } ``` 输出: ``` Constructor called Destructor called ``` #### C. 手动调用时 - **错误**:虽然可以在代码中手动调用析构函数,但这通常不推荐,因为手动调用析构函数可能会导致资源管理问题。C++标准建议让编译器自动管理析构函数的调用。 - **示例**: ```cpp class MyClass { public: MyClass() { std::cout << "Constructor called" << std::endl; } ~MyClass() { std::cout << "Destructor called" << std::endl; } }; int main() { MyClass obj; obj.~MyClass(); // 手动调用析构函数,不推荐 return 0; } ``` 输出: ``` Constructor called Destructor called Destructor called // 再次调用,可能导致未定义行为 ``` #### D. 以上都不是 - **错误**:显然,选项B是正确的,所以这个选项不成立。 ### 总结 析构函数在对象的作用域结束时被自动调用,这是C++语言的一个重要特性,用于确保资源的正确释放和对象的清理。希望这些解释和示例能帮助你更好地理解这个问题。
世界职业院校技能大赛汽车工程系选拔理论考试题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码