C++特性--动态内存和智能指针
一、new和delete
new和delete与c语言的内存管理函数malloc和free是类似的,都是用于内存的分配与释放。不同的是,new用于分配内存时,会进行对象的创建和销毁,也就是调用构造函数和析构函数。
用法:如int* ptr=new int;待变分配了一个int类型的内存给一个指向int类型的指针。释放内存:delete ptr;
二、数组的动态内存分配
1.一维数组的动态内存分配
用法:如int* ptr=new int[20];//分配长度为20的int类型内存;
delete [] ptr//释放内存
2.二维数组的动态内存分配
用法:int **array;
// 假定数组第一维长度为 m, 第二维长度为 n
// 动态分配空间
array = new int *[m];
for( int i=0; i<m; i++ )
{
array[i] = new int [n];
}
//释放
for( int i=0; i<m; i++ )
{
delete [] array[i];
}
delete [] array;
三、智能指针
智能指针(Smart Pointer)是 C++ 中的一种特殊指针类型,它通过自动管理内存的生命周期来防止内存泄漏和管理资源。智能指针的主要目的是解决传统指针在动态内存管理中存在的问题,比如忘记释放内存(导致内存泄漏)或重复释放内存(导致程序崩溃)。
std::unique_ptr
:独占所有权的智能指针,同一时间只能有一个unique_ptr
指向特定内存。std::shared_ptr
:共享所有权的智能指针,多个shared_ptr
可以指向同一内存,内存在最后一个shared_ptr
被销毁时释放。std::weak_ptr
:弱引用智能指针,用于与shared_ptr
配合使用,避免循环引用导致的内存泄漏。
四、参考
C++ 教程 | 菜鸟教程 (runoob.com);