3 回答
TA贡献1890条经验 获得超9个赞
vector<Type> vect;
将vector在堆栈上分配,即标头信息,但在免费存储(“堆”)上分配元素。
vector<Type> *vect = new vector<Type>;
在免费商店中分配所有东西。
vector<Type*> vect;
将vector在堆栈上分配,并在免费存储区上分配一堆指针,但是这些指针的位置由使用方式决定(例如,您可以将元素0指向免费存储区,将元素1指向堆栈)。
TA贡献1864条经验 获得超2个赞
假设实际上有一个堆栈和一个堆的实现(标准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
除最后一部分外为真,并带有类似的反例:
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);
}
TA贡献1851条经验 获得超3个赞
vector<Type> vect; //allocates vect on stack and each of the Type (using std::allocator) also will be on the stack
不,vect将在堆栈上,但是内部用于存储项目的数组将在堆上。这些项目将驻留在该数组中。
vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack
否。与上述相同,除了vector该类也将在堆上。
vector<Type*> vect; //vect will be on stack and Type* will be on heap.
vect将位于堆栈上,其项(指向的指针Type)将位于堆上,并且您无法确定Type指针所指向的s在哪里。可能在堆栈上,可能在堆上,可能在全局数据中,可能在任何地方(即NULL指针)。
顺便说一句,该实现实际上可以将某些矢量(通常为小尺寸)完全存储在堆栈中。我不是知道任何这样的实现,但是可以。
- 3 回答
- 0 关注
- 740 浏览
添加回答
举报