Ben*_*xon 15 c++ heap class member-variables
好的,所以我对C++编程非常陌生,而且我已经花了几天的时间来寻找一个决定性的答案.什么时候我应该在堆与堆栈上声明成员变量?我发现的大多数答案都涉及其他问题,但我想知道何时最好将堆用于成员变量,以及为什么最好堆积成员而不是堆叠它们.
Oli*_*rth 19
首先要掌握两个重要概念:
人们应该避免考虑"堆"和"堆栈".这些是编译器/平台的实现细节,而不是语言的实现细节.1 相反,从对象生命周期的角度思考:对象的生命周期应该与其"父"的生命周期相对应,还是应该比它的寿命更长?如果您需要后者,那么您将需要new(直接或间接)使用动态分配对象.
成员变量的生命周期始终与父项相同.成员变量可以是指针,它指向的对象可能具有独立的生命周期.但是指向对象不是成员变量.
但是,您的问题没有一般性答案.粗略地说,除非有充分的理由,否则不要动态分配.正如我上面所暗示的,这些原因通常对应于生命周期需要与其"父母"不同的情况.
成员变量是类本身的成员。它们既不在堆上也不在堆栈上,或者更确切地说,它们位于类本身所在的位置。
添加一个间接级别并在堆上单独分配成员的原因很少:多态性(如果成员的类型不总是相同)是迄今为止最常见的。