c++中對象內存放堆上還是在棧上是不是根據對象實例化的方法,如:
A a; //在棧中分配內存
A * a = new A(); //動態內存分配,在堆上
要是這樣,如果我盡量不用指針的話(這樣程序風格似乎更加清晰一些),那是不是對象都分配到棧上了?這有什麼弊端嗎?棧的空間是不是很有限?是不是為了棧空間的問題我們必須盡量多用new分配內存呢?類成員是不是也要多用指針呢?
經過昨晚大家的熱心幫助,對該問題的疑問已經煙消雲散,謝謝大家!在此總結一下:
“非new的對象在棧中分配,new的對象在堆中分配” 這句話是沒有問題的。而這個
class A {
public:
A(void) :v1(10) { v1[0] = "abc"; }
vector v1;
};
只是一個類的定義,還沒有實例化,是不涉及到任何內存分配的,根本不適用於內存分配原則。就算實例化後,v1變量只是a對象的一個成員變量,它在堆上還是在棧上是由a對象的分配方式決定的,而不是由其聲明方式決定的。