单选题
C++中的智能指针是什么?
A
自动管理内存的指针
B
显式管理内存的指针
C
仅用于数组的指针
D
以上都不是
答案解析
正确答案:A
解析:
好的,让我们来详细解析这道题。
### 题目:C++中的智能指针是什么?
#### 选项分析:
**A. 自动管理内存的指针**
- **解释**:智能指针是一种特殊的指针类型,它在内部封装了普通指针,并提供了自动管理内存的功能。当智能指针对象被销毁时(例如,当它超出作用域或被显式删除时),它会自动释放所指向的内存。这样可以有效避免内存泄漏和悬挂指针等问题。
- **示例**:
```cpp
#include
void example() {
std::unique_ptr ptr(new int(10)); // 创建一个智能指针
// 使用 ptr
*ptr = 20;
// 当函数结束时,ptr 超出作用域,自动释放内存
}
```
**B. 显式管理内存的指针**
- **解释**:显式管理内存的指针是指传统的普通指针,需要程序员手动管理内存。例如,使用 `new` 分配内存,使用 `delete` 释放内存。这种方式容易导致内存泄漏和悬挂指针等问题。
- **示例**:
```cpp
void example() {
int* ptr = new int(10); // 手动分配内存
// 使用 ptr
*ptr = 20;
delete ptr; // 手动释放内存
}
```
**C. 仅用于数组的指针**
- **解释**:这种说法不准确。虽然 C++ 中有一些专门用于管理数组的智能指针(如 `std::unique_ptr` 和 `std::shared_ptr>`),但智能指针并不仅限于数组。它们可以用于任何类型的动态分配的对象。
- **示例**:
```cpp
#include
void example() {
std::unique_ptr arr(new int[5]); // 管理数组的智能指针
for (int i = 0; i < 5; ++i) {
arr[i] = i * 10;
}
// 当函数结束时,arr 超出作用域,自动释放内存
}
```
**D. 以上都不是**
- **解释**:这个选项显然是错误的,因为智能指针确实存在并且具有自动管理内存的功能。
### 为什么选择 A 作为答案?
智能指针的主要特点就是自动管理内存,这是它们与传统指针的主要区别。通过自动管理内存,智能指针可以显著减少内存泄漏和其他与内存管理相关的问题。因此,选项 A 是正确的。
相关题目
单选题
游标卡尺上游标的刻线数越多则游标的读数精度越高。( )
单选题
用千分尺测量工件时,先旋转微分套筒,当测砧与工件测量表面接近时改用旋转棘轮,直到棘轮发出2~3下 “咔、咔…”声时,开始读数。
单选题
汽车维护中常用扭力扳手的规格为0~500N·m。( )
单选题
喷枪由涂料罐、枪身和喷枪控制装置等及部分组成( )。
单选题
子午线轮胎一般采用循环换位法。( )
单选题
当排量一定时,短行程发动机具有缸径较小的结构特点。( )
单选题
腻子是汽车车身维修中必不可少的一种填充材料( )。
单选题
职工对企业完成本职工作即可,谋划企业发展由有见识的人来做。( )
单选题
诚实守信是维持市场经济秩序的基本法则。( )
单选题
发动机润滑系中用来储存润滑油的装置是油底壳( )。
