唯一/共享 ptr 用于在数组超出范围后自动删除阵列

Unique/Shared ptr to automatically delete array after it goes out of scope

本文关键字:范围 阵列 删除 共享 ptr 用于 数组 唯一      更新时间:2023-10-16

我正在努力提高我的C++技能。假设我有以下一段代码

#include <iostream>
using namespace std;
int main()
{
    int *p;
    p=new int[10];
    delete [] p;
    return 0;
}

如何使用唯一/共享 ptr 自动删除数组,而不是在这段代码超出范围时手动删除数组?顺便说一句,我已经在 SO 中读到我可能需要下载提升库才能使用唯一/共享的 ptr。谁能证实这一点?还是包含在标准数据库中?

C++11 中有std::unique_ptr<T[]>,它允许您执行以下操作:

std::unique_ptr<int[]> p(new int[10]);

如果需要编译时常量数组,可以改用std::array

std::array<int, 10> p;

否则,只需选择好的旧std::vector

std::vector<int> p(10);

自 C++11 起,std::unique_ptr 包含在标准库中。 你可以做:

#include <memory>
int main()
{
    std::unique_ptr<int[]> p( new int[10] );
}

顺便说一句,using namespace std;是一个坏习惯。

您也可以考虑使用 std::vector<int> 而不是 std::unique_ptr<int[]>