我刚开始使用STL,说我有一个兔子班,现在我正在创建一个兔子军...
#include <vector>
vector<rabbit> rabbitArmy (numOfRabbits,rabbit());
//Q1: these rabbits are on the heap right?
rabbit* rabbitOnHeap = new rabbit();
//Q2: rabbitOnHeap is on the heap right?
rabbit rabbitOnStack;
//Q3: this rabbit is on the stack right?
rabbitArmy.push_back(rabbitOnStack);
//Q4: rabbitOnStack will remain stored on the stack?
//And it will be deleted automatically, though it's put in the rabbitArmy now?
第四季是我最关心的问题,如果我总是使用 new 关键字将兔子加入我的军队?
问题5:是否有更好的方法将兔子加入军队:
rabbitArmy.push_back(*rabbitOnHeap);
答案 0 :(得分:2)
std::allocator<rabbit>
进行分配,该new
使用new
。对于它的价值,那个通常称为“免费商店”而不是堆 1 。new
来分配您要放入标准集合中的项目。由于数组中的项目将是您传递的内容的副本,因此通常不需要使用for (i=0; i<10; i++)
rabbitArmy.push_back(rabbit());
来分配它。例如:
rabbit
这会创建10个临时rabbit()
个对象(calloc
部分),并将每个对象的副本添加到rabbitArmy中。然后每个临时人员都被摧毁了,但是他们在兔子军队中的副本仍然存在。
malloc
,realloc
,free
和new
管理的内存。 delete
和operator new
管理的是免费商店。反过来,新表达式从operator new
(全局或类内)获取内存。指定了operator delete
和malloc
,因此 几乎可以分别直接传递给free
和{{1}},但即使是这样的话也是如此堆和免费商店通常被认为是分开的。