单选题
在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++语言的一个重要特性,用于确保资源的正确释放和对象的清理。希望这些解释和示例能帮助你更好地理解这个问题。
相关题目
单选题
汽车在修理过程中,其维修质量取决于汽车修理的工艺规程、工艺设备、工作人员的工作素质。( )
单选题
磨料的粒度越大,号数越大。( )
单选题
游标卡尺上游标的刻线数越多则游标的读数精度越高。( )
单选题
用千分尺测量工件时,先旋转微分套筒,当测砧与工件测量表面接近时改用旋转棘轮,直到棘轮发出2~3下 “咔、咔…”声时,开始读数。
单选题
汽车维护中常用扭力扳手的规格为0~500N·m。( )
单选题
喷枪由涂料罐、枪身和喷枪控制装置等及部分组成( )。
单选题
子午线轮胎一般采用循环换位法。( )
单选题
当排量一定时,短行程发动机具有缸径较小的结构特点。( )
单选题
腻子是汽车车身维修中必不可少的一种填充材料( )。
单选题
职工对企业完成本职工作即可,谋划企业发展由有见识的人来做。( )
