실제로 스택과 힙이있는 구현 (표준 C ++은 그러한 것을 요구하지 않음)을 가정하면 유일한 유일한 진술은 마지막 진술입니다.
vector<Type> vect;
//allocates vect on stack and each of the Type (using std::allocator) also will be on the stack
마지막 부분을 제외하고는 마찬가지입니다 ( Type
스택에 있지 않음). 상상해보십시오.
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);
}