c++ - 如何使用 std::auto_ptr 声明动态数组?

标签 c++ arrays auto-ptr

我正在尝试声明一个动态 int 数组,如下所示:

int n;
int *pInt = new int[n];

我可以用 std::auto_ptr 做到这一点吗?

我试过类似的方法:

std::auto_ptr<int> pInt(new int[n]);

但是它不编译。

我想知道我是否可以使用 auto_ptr 构造声明一个动态数组,以及如何声明。谢谢!

最佳答案

不,你不能,也不会:C++98 在数组方面非常有限,auto_ptr是一个非常笨拙的野兽,它通常不会做你需要的事情。

您可以:

  • 使用 std::vector<int>/std::deque<int> , 或 std::array<int, 10> ,或者

  • 使用 C++11 和 std::unique_ptr<int[]> p(new int[15]) ,或者

  • 使用 C++11 和 std::vector<std::unique_ptr<int>> (虽然这对于 int 来说太复杂了)。

如果数组的大小在编译时已知,则使用静态容器之一(array 或数组唯一指针)。如果非要在运行时修改大小,基本都是用vector ,但对于较大的类,您还可以使用唯一指针 vector 。

std::unique_ptr是什么std::auto_ptr想成为但由于语言的限制不能成为。

关于c++ - 如何使用 std::auto_ptr 声明动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8320258/

相关文章:

c++ - std::auto_ptr 在我的模板类中编译但不是 std::unique_ptr

c++ - 跨 C API 边界将句柄传递给 C++ 类

c++ - 匹配别名模板作为模板参数

php - 如何在分区中反转 PHP 数组

python - 如何访问 N*M*M numpy 数组的下三角

c++ - std::auto_ptr 或 boost::shared_ptr 用于 pImpl 成语?

C++ UDP RecvFrom、SendTo 不同套接字

c++ - C++ 声明中的显式限定

ios - Swift 中特殊的 JSON 解析

c++ - 放弃 auto_ptr 包含对象的所有权