假设我需要从另一个容器创建堆分配容器。初始容器是否也需要进行堆分配,还是将其值隐式复制到堆中,因此原始容器可以只是一个局部变量?例如:
list<int> my_function()
{
set<int> my_set;
my_set.insert(1);
my_set.insert(2);
list<int> *my_list = new list<int>(my_set.begin(), my_set.end());
return *my_list;
}
与
list<int> my_function()
{
set<int> *my_set = new set<int>;
my_set->insert(1);
my_set->insert(2);
list<int> *my_list = new list<int>(my_set->begin(), my_set->end());
return *my_list;
}
以上哪项是正确的?我当然希望在我不知情的情况下避免重复堆内存。
答案 0 :(得分:2)
这是正确的:
list<int> my_function()
{
set<int> my_set;
my_set.insert(1);
my_set.insert(2);
return list<int>(my_set.begin(), my_set.end());
}
我不确定你对“堆分配”的意思,但请记住,list
和set
已经将数据存储在堆上。