乐闻世界logo
搜索文章和话题

unique_ptr和array有什么用吗?

2 个月前提问
2 个月前修改
浏览次数29

1个答案

1

unique_ptr 的作用

std::unique_ptr 是 C++11 中引入的一种智能指针,它用于管理动态分配的内存,确保资源的正确释放,防止内存泄漏。unique_ptr 的特点是它拥有其所指向的对象,同一时间内只能有一个 unique_ptr 拥有同一个对象。一旦 unique_ptr 被销毁或者离开作用域,它所管理的内存也会被自动释放。

用处:

  1. 资源管理:自动管理内存,防止忘记释放内存导致的内存泄漏。
  2. 对象所有权的表达:表达对象的唯一所有权语义,防止资源的多重释放。
  3. 实现安全的资源转移:支持移动语义,可以安全转移资源的所有权,用于函数的返回类型或从函数中传出局部对象。

例子

假设有一个类 Car,我们想在函数中创建一个 Car 实例,并返回这个实例,但不想拷贝对象:

cpp
#include <memory> class Car { public: Car() { std::cout << "Car created" << std::endl; } ~Car() { std::cout << "Car destroyed" << std::endl; } void drive() { std::cout << "Car driving" << std::endl; } }; std::unique_ptr<Car> createCar() { std::unique_ptr<Car> myCar = std::make_unique<Car>(); return myCar; // 返回一个 unique_ptr,所有权安全转移 } int main() { std::unique_ptr<Car> car = createCar(); car->drive(); return 0; // car 被自动销毁,内存被释放 }

array 的作用

std::array 是 C++11 中引入的容器类型,它是对原始数组的一个封装,提供类似于容器的接口。与原始数组相比,std::array 提供了更安全、更方便的操作方法,而且大小在编译时就已确定,存储在栈上。

用处:

  1. 固定大小的数组封装:提供了固定大小的数组封装,保证类型安全和更多的成员函数,如 size(), begin(), end() 等。
  2. 性能:与原始数组几乎有相同的性能,因为数据存储在栈上,访问速度快。
  3. 更好的语义:支持范围for循环和算法库中的函数,使代码更简洁、更易维护。

例子

使用 std::array 来存储一些整数,并遍历打印:

cpp
#include <array> #include <iostream> int main() { std::array<int, 4> numbers = {1, 2, 3, 4}; for (int number : numbers) { std::cout << number << " "; } std::cout << std::endl; return 0; }

以上是 unique_ptrarray 在现代 C++ 开发中的几个主要用途及示例应用,它们都是为了提高代码的安全性、可读性和维护性。

2024年7月23日 11:06 回复

你的答案