สมมติว่ามีการนำไปใช้งานซึ่งจริง ๆ แล้วมีกองและกอง (c ++ มาตรฐานทำให้ไม่มีความต้องการที่จะมีสิ่งต่าง ๆ ) ข้อความจริงเพียงอย่างเดียวคือคนสุดท้าย
vector<Type> vect;
//allocates vect on stack and each of the Type (using std::allocator) also will be on the stack
สิ่งนี้เป็นจริงยกเว้นส่วนสุดท้าย ( Type
จะไม่อยู่ในสแต็ก) Imagine:
void foo(vector<Type>& vec) {
// Can't be on stack - how would the stack "expand"
// to make the extra space required between main and foo?
vec.push_back(Type());
}
int main() {
vector<Type> bar;
foo(bar);
}
ในทำนองเดียวกัน:
vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack
True ยกเว้นส่วนสุดท้ายพร้อมด้วยตัวนับที่คล้ายกัน:
void foo(vector<Type> *vec) {
// Can't be on stack - how would the stack "expand"
// to make the extra space required between main and foo?
vec->push_back(Type());
}
int main() {
vector<Type> *bar = new vector<Type>;
foo(bar);
}
สำหรับ:
vector<Type*> vect; //vect will be on stack and Type* will be on heap.
นี่เป็นความจริง แต่โปรดสังเกตที่นี่ว่าพType*
อยน์เตอร์จะอยู่บนฮีป แต่Type
อินสแตนซ์ที่ชี้ไปไม่จำเป็นต้องเป็น:
int main() {
vector<Type*> bar;
Type foo;
bar.push_back(&foo);
}