unique_ptr 的作用
std::unique_ptr
是 C++11 中引入的一种智能指针,它用于管理动态分配的内存,确保资源的正确释放,防止内存泄漏。unique_ptr
的特点是它拥有其所指向的对象,同一时间内只能有一个 unique_ptr
拥有同一个对象。一旦 unique_ptr
被销毁或者离开作用域,它所管理的内存也会被自动释放。
用处:
- 资源管理:自动管理内存,防止忘记释放内存导致的内存泄漏。
- 对象所有权的表达:表达对象的唯一所有权语义,防止资源的多重释放。
- 实现安全的资源转移:支持移动语义,可以安全转移资源的所有权,用于函数的返回类型或从函数中传出局部对象。
例子:
假设有一个类 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
提供了更安全、更方便的操作方法,而且大小在编译时就已确定,存储在栈上。
用处:
- 固定大小的数组封装:提供了固定大小的数组封装,保证类型安全和更多的成员函数,如
size()
,begin()
,end()
等。 - 性能:与原始数组几乎有相同的性能,因为数据存储在栈上,访问速度快。
- 更好的语义:支持范围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_ptr
和 array
在现代 C++ 开发中的几个主要用途及示例应用,它们都是为了提高代码的安全性、可读性和维护性。
2024年7月23日 11:06 回复