本人想通过构造函数或其他什么方式,动态分配数组成员的大小,问一下要怎么做呢?
class a{
public:
int b[maxm];
}
maxm是未知的
class a{
public:
int b[maxm];
}
maxm是未知的
解决方案
5
#include <cstdlib>
#include <new>
class a {
public:
void operator delete(void* ptr) {
std::free(ptr);
}
static auto create(int len) -> a* {
if (const auto ptr = std::malloc(sizeof(a) + sizeof(int)*len)) {
return new(ptr) a();
}
return nullptr;
}
int b[0];
};
int main() {
auto a0 = a::create(50);
a0->b[49] = 0;
delete a0;
return 0;
}
编译器不支持空数组的话,弄成1就行了,然后malloc时再减去那一个的空间就行,
不过这个类就这一个成员,用这个意义不大。
有时候需要动态构造一个对象,这个对象又要需要一个运行时数组的时候,这个最方便了。
10
这么写:
class a{
public:
int* b;
a(int size)
{
b = new int[size];
}
};
5
template<int N>
class MyArray
{
private:
int vector[N];
public:
MyArray()
{
}
};
int main(int argc, char** argv){
MyArray<10> myArray;
return 0 ;
}