NoUN Asked:2025-01-08 18:28:39 +0000 UTC2025-01-08 18:28:39 +0000 UTC 2025-01-08 18:28:39 +0000 UTC 创建指向非数组的动态指针是否有意义? 772 我不明白创建指向非数组的动态指针是否有意义。也就是说,下面代码的意思就清楚了。 unique_ptr<int[]>ptr = make_unique<int[]>(2); 但这有意义吗: unique_ptr<int>ptr = make_unique<int>(2); c++ 1 个回答 Voted Best Answer HolyBlackCat 2025-01-09T01:08:45Z2025-01-09T01:08:45Z 在您的情况和第一个示例中,这是没有意义的。如果数组的大小是在运行时计算的,或者太大以至于无法放入堆栈,则会出现此情况。 将非数组放在堆上还有一些原因: 同样,它太大了,无法放入堆栈中。 由于某种原因,需要地址稳定性(当指针移动到某处时)。但后来他们更频繁地使用它std::shared_ptr。 您需要精确控制对象何时被销毁,例如它是否应该比当前函数更长寿。
在您的情况和第一个示例中,这是没有意义的。如果数组的大小是在运行时计算的,或者太大以至于无法放入堆栈,则会出现此情况。
将非数组放在堆上还有一些原因:
同样,它太大了,无法放入堆栈中。
由于某种原因,需要地址稳定性(当指针移动到某处时)。但后来他们更频繁地使用它
std::shared_ptr。您需要精确控制对象何时被销毁,例如它是否应该比当前函数更长寿。