堆分配的对象构造函数

时间:2014-04-05 01:35:35

标签: c++

假设我需要从另一个容器创建堆分配容器。初始容器是否也需要进行堆分配,还是将其值隐式复制到堆中,因此原始容器可以只是一个局部变量?例如:

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;
}

以上哪项是正确的?我当然希望在我不知情的情况下避免重复堆内存。

1 个答案:

答案 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());
}

我不确定你对“堆分配”的意思,但请记住,listset已经将数据存储在堆上。