考虑以下代码:
class myarray
{
int i;
public:
myarray(int a) : i(a){ }
}
如何在堆栈上创建 myarray 的对象数组以及如何在堆上创建对象数组?
原文由 Light_handle 发布,翻译遵循 CC BY-SA 4.0 许可协议
考虑以下代码:
class myarray
{
int i;
public:
myarray(int a) : i(a){ }
}
如何在堆栈上创建 myarray 的对象数组以及如何在堆上创建对象数组?
原文由 Light_handle 发布,翻译遵循 CC BY-SA 4.0 许可协议
要使用以最大大小分配的堆栈内存,并通过运行时选择大小的标准 stl 容器查看它,可以使用 std::span。
#include <span>
using namespace std;
struct Toto{ int i; char name[20];};
Toto mem[100];
int n=3;
std::span<Toto> s(&mem[0], n);
我的用例涉及一个被调用一百万次并使用几个数组(当前为 std::vectors)的函数。我想知道以这种方式替换 std::vector 是否会更快。还没有尝试过……另一种可能性是分配std :: vector一次而不是一百万次。
原文由 Ludovic Aubert 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您可以通过以下方式在堆栈上创建对象数组† :
在堆上† (或“freestore”):
但最好不要自己管理内存。相反,使用 std::vector :
向量是一个动态数组,它(默认情况下)从堆中分配元素。 ††
因为您的类没有默认构造函数,要在堆栈上创建它,您需要让编译器知道将什么传递给构造函数:
或使用向量:
当然,你总是可以给它一个默认的构造函数:
† 对于学究:C++ 并没有真正的“堆栈”或“堆”/“freestore”。我们拥有的是“自动存储”和“动态存储”持续时间。在实践中,这与堆栈分配和堆分配保持一致。
††如果你想从堆栈中“动态”分配,你需要定义一个最大大小(堆栈存储提前知道),然后给向量一个新的分配器,以便它使用堆栈。