关于类中数组大小的有关问题

关于类中数组大小的问题

class A{
 int size;
 int data[size];
 A(int num):size(num){}
}

这样初始化列表为什么不可以?有没有一种办法实现在建立类对象的时候再确定大小,别说用vector或者改变数据成员成为int *data在构造函数里new,我只想在这种状态下有没有一种方法解决这个问题,谢谢!
------解决方案--------------------
引用:

class A{
 int size;
 int data[size];
 A(int num):size(num){}
}

这样初始化列表为什么不可以?有没有一种办法实现在建立类对象的时候再确定大小,别说用vector或者改变数据成员成为int *data在构造函数里new,我只想在这种状态下有没有一种方法解决这个问题,谢谢!

这个是不可以的。
第一数组定义的时候不能动态。
第二size的值还没有初始化,就用,非常危险。
支持动态的有vector等,但也不能这么用。必须要size初始化后才可以。
size初始化,可以是在接受输入之后。
或者,这个地方换成指针。也是可以的。
总的来说,结构的的大小必须是固定的,不能是动态的。
------解决方案--------------------
引用:
引用
data数组是在初始化列表之前分配空间的

不是先创建size并赋值吗,有了size,那么创建data并分配空间应该不会有问题啊?


成员变量都是在构造函数体之前的隐式初始化阶段初始化的,而写在初始化列表中的变量会例外的延迟到列表时再初始化。所以size会在初始化列表中初始化,而data是在那之前,但是那时size还没有初始化,所以会出错啊。(size必须是const常量)
------解决方案--------------------
引用:
引用
成员变量都是在构造函数体之前的隐式初始化阶段初始化的,而写在初始化列表中的变量会例外的延迟到列表时再初始化。所以size会在初始化列表中初始化,而data是在那之前,但是那时size还没有初始化,所以会出错啊。(size必须是const常量)

有点懂了,请问有办法在构造函数体运行时再确定数组大小吗?


那是不可能的 
构造函数运行之前 
得先为这个对象分配足够的内存 
足够的内存的依据之一就是足以存放全部成员 你数组不知道多大 
完全无法确定需要多少内存
完全无法分配内存
内存无法分配 构造函数运行无从谈起 
于是 直接就是Error
------解决方案--------------------
引用:
引用
成员变量都是在构造函数体之前的隐式初始化阶段初始化的,而写在初始化列表中的变量会例外的延迟到列表时再初始化。所以size会在初始化列表中初始化,而data是在那之前,但是那时size还没有初始化,所以会出错啊。(size必须是const常量)

有点懂了,请问有办法在构造函数体运行时再确定数组大小吗?
你这里在构造函数 new[] 在析构函数 delete[]
完全没问题 为什么一定要避开这个简单的解决方式呢?