本人想通过构造函数或其他什么方式,动态分配数组成员的大小,问一下要怎么做呢?
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 ; }