2ma*_*mac 1 c++ arrays static-memory-allocation
假设我上课了...
class Foo
{
public:
Foo(int size);
private:
const int size;
int data[];
};
Run Code Online (Sandbox Code Playgroud)
假设在实例化时立即设置了size字段,如何data根据该大小输入设置长度?
我通常会在std::vector这里使用,但我正在为Arduino编写一个库,所以它不会飞,我试图避免外部依赖,如果可以的话.
你在这里运气不好,因为C++必须在编译时知道数组的大小(换句话说,size必须是一个常量表达式).您可以选择使用动态分配
int* data;
Run Code Online (Sandbox Code Playgroud)
然后new int[size];在构造函数初始化列表中分配,或者更好的是,使用std::unique_ptr<>(C++ 11或更高版本),这是一个围绕原始指针的光包装,并在范围退出时删除其分配的内存,因此您不必手动delete[]
class Foo
{
private:
std::unique_ptr<int[]> data; // no need to manually delete
public:
Foo(int size): data{new int[size]} {}
};
Run Code Online (Sandbox Code Playgroud)
第三个选项是创建Foo一个非类型模板类(假设您知道编译时的大小,这似乎正在发生,至少从您的问题判断)
template<std::size_t size>
class Foo
{
int data[size];
public:
Foo()
{
// constructor here
}
};
Run Code Online (Sandbox Code Playgroud)